ERC-20
Overview
Max Total Supply
1,000,000,000 APEPE
Holders
219
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.363129783243945897 APEPEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ALPHAPEPE
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-20 */ // SPDX-License-Identifier: MIT // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction 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; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: contracts/Alpha_pepe_other_dev.sol pragma solidity ^0.8.0; contract ALPHAPEPE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address public uniswapV2Pair; // addresses address public devWallet; address private marketingWallet; // limits uint256 private maxBuyAmount; uint256 private maxSellAmount; uint256 private maxWalletAmount; uint256 private thresholdSwapAmount; // status flags bool private isTrading = false; bool public swapEnabled = false; bool public isSwapping; struct Fees { uint8 buyTotalFees; uint8 buyMarketingFee; uint8 buyDevFee; uint8 buyLiquidityFee; uint8 sellTotalFees; uint8 sellMarketingFee; uint8 sellDevFee; uint8 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyMarketingFee: 0, buyDevFee: 0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevFee: 0, sellLiquidityFee: 0 }); uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; uint256 private taxTill; // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedMaxWalletAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public marketPair; mapping(address => bool) public _isBlacklisted; event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived); constructor() ERC20('Alpha PEPE', 'APEPE') { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; _isExcludedMaxWalletAmount[owner()] = true; _isExcludedMaxWalletAmount[address(this)] = true; approve(address(router), type(uint256).max); uint256 totalSupply = 1e9 * 1e18; maxBuyAmount = totalSupply * 3 / 100; maxSellAmount = totalSupply * 3 / 100; maxWalletAmount = totalSupply * 3 / 100; thresholdSwapAmount = totalSupply * 5 / 1000; // 0.5% swap wallet _fees.buyMarketingFee = 2; _fees.buyLiquidityFee = 0; _fees.buyDevFee = 1; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = 20; _fees.sellLiquidityFee = 0; _fees.sellDevFee = 0; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; marketingWallet = address(0x9b01217cED9720a061CeFb5902DCb7268A276eC3); devWallet = address(0xdFb8dE1e292B5F5c2eCF7c7D0D8E63157cd11965); _mint(msg.sender, totalSupply); } receive() external payable {} function startTrading(address pair, uint256 blocks) external onlyOwner { isTrading = true; swapEnabled = true; taxTill = block.number.add(blocks); uniswapV2Pair = pair; marketPair[address(pair)] = true; _isExcludedMaxWalletAmount[address(pair)] = true; _isExcludedMaxTransactionAmount[address(pair)] = true; } function airdropTokens(address[] calldata addresses, uint256[] calldata tokens) external onlyOwner { require(addresses.length == tokens.length,"Mismatch between Address and token count"); uint256 SCCC = 0; for(uint i=0; i < addresses.length; i++){ SCCC = SCCC + tokens[i]; } require(balanceOf(address(this)) >= SCCC, "Not enough tokens on contract"); for(uint i=0; i < addresses.length; i++){ _transfer(address(this), addresses[i], tokens[i]); } } function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns (bool) { thresholdSwapAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner { require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%"); require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%"); maxBuyAmount = (totalSupply() * newMaxBuy) / 1000; maxSellAmount = (totalSupply() * newMaxSell) / 1000; } function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner { require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%"); maxWalletAmount = (totalSupply() * newPercentage) / 1000; } function toggleSwapEnabled(bool enabled) external onlyOwner() { swapEnabled = enabled; } function blacklistAddress(address account, bool value) external onlyOwner { _isBlacklisted[account] = value; } function rescueERC20(address token, uint256 amount) external onlyOwner { IERC20(token).transfer(msg.sender, amount); } function updateFees( uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy, uint8 _devFeeBuy, uint8 _marketingFeeSell, uint8 _liquidityFeeSell, uint8 _devFeeSell ) external onlyOwner { _fees.buyMarketingFee = _marketingFeeBuy; _fees.buyLiquidityFee = _liquidityFeeBuy; _fees.buyDevFee = _devFeeBuy; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = _marketingFeeSell; _fees.sellLiquidityFee = _liquidityFeeSell; _fees.sellDevFee = _devFeeSell; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less"); require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedMaxWalletAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function setMarketPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "Must keep uniswapV2Pair"); marketPair[pair] = value; } function setWallets(address _marketingWallet, address _devWallet) external onlyOwner { marketingWallet = _marketingWallet; devWallet = _devWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address sender, address recipient, uint256 amount ) internal override { if (amount == 0) { super._transfer(sender, recipient, 0); return; } if ( sender != owner() && recipient != owner() && !isSwapping ) { if (!isTrading) { require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active."); } if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) { require(amount <= maxBuyAmount, "buy transfer over max amount"); } else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) { require(amount <= maxSellAmount, "Sell transfer over max amount"); } if (!_isExcludedMaxWalletAmount[recipient]) { require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded"); } require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address"); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= thresholdSwapAmount; if ( canSwap && swapEnabled && !isSwapping && marketPair[recipient] && !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient] ) { isSwapping = true; swapBack(); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { uint256 fees = 0; if (block.number < taxTill) { fees = amount.mul(99).div(100); tokensForMarketing += (fees * 94) / 99; tokensForDev += (fees * 5) / 99; } else if (marketPair[recipient] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees; tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees; } // on buy else if (marketPair[sender] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees; tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(sender, address(this), fees); } amount -= fees; } super._transfer(sender, recipient, amount); } function swapTokensForEth(uint256 tAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tAmount); // add the liquidity router.addLiquidityETH{value: ethAmount}( address(this), tAmount, 0, 0, address(this), block.timestamp ); } function swapBack() private { uint256 contractTokenBalance = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; if (contractTokenBalance == 0 || toSwap == 0) { return; } if (contractTokenBalance > thresholdSwapAmount) { contractTokenBalance = thresholdSwapAmount; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);} if(address(this).balance.sub(ethForMarketing) > 0){ payable(devWallet).transfer(address(this).balance.sub(ethForMarketing));} if(address(this).balance > 0){ payable(marketingWallet).transfer(address(this).balance);} } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040525f600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff0219169083151502179055506040518061010001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250600e5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555060a0820151815f0160056101000a81548160ff021916908360ff16021790555060c0820151815f0160066101000a81548160ff021916908360ff16021790555060e0820151815f0160076101000a81548160ff021916908360ff160217905550505034801562000197575f80fd5b506040518060400160405280600a81526020017f416c7068612050455045000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4150455045000000000000000000000000000000000000000000000000000000815250816003908162000215919062000eed565b50806004908162000227919062000eed565b5050506200024a6200023e6200082b60201b60201c565b6200083260201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160145f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f620002fe620008f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f620003b7620008f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f62000470620008f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005486080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200091d60201b60201c565b505f6b033b2e3c9fd0803ce8000000905060646003826200056a919062000ffe565b62000576919062001075565b60098190555060646003826200058d919062000ffe565b62000599919062001075565b600a819055506064600382620005b0919062000ffe565b620005bc919062001075565b600b819055506103e8600582620005d4919062000ffe565b620005e0919062001075565b600c819055506002600e5f0160016101000a81548160ff021916908360ff1602179055505f600e5f0160036101000a81548160ff021916908360ff1602179055506001600e5f0160026101000a81548160ff021916908360ff160217905550600e5f0160029054906101000a900460ff16600e5f0160039054906101000a900460ff16600e5f0160019054906101000a900460ff16620006819190620010b8565b6200068d9190620010b8565b600e5f015f6101000a81548160ff021916908360ff1602179055506014600e5f0160056101000a81548160ff021916908360ff1602179055505f600e5f0160076101000a81548160ff021916908360ff1602179055505f600e5f0160066101000a81548160ff021916908360ff160217905550600e5f0160069054906101000a900460ff16600e5f0160079054906101000a900460ff16600e5f0160059054906101000a900460ff16620007429190620010b8565b6200074e9190620010b8565b600e5f0160046101000a81548160ff021916908360ff160217905550739b01217ced9720a061cefb5902dcb7268a276ec360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dfb8de1e292b5f5c2ecf7c7d0d8e63157cd1196560075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200082433826200094f60201b60201c565b50620012ff565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f806200092f6200082b60201b60201c565b90506200094481858562000ab460201b60201c565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b79062001151565b60405180910390fd5b620009d35f838362000c7f60201b60201c565b8060025f828254620009e6919062001171565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a959190620011bc565b60405180910390a362000ab05f838362000c8460201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1c906200124b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8d90620012df565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c729190620011bc565b60405180910390a3505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d0557607f821691505b60208210810362000d1b5762000d1a62000cc0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d42565b62000d8b868362000d42565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000dd562000dcf62000dc98462000da3565b62000dac565b62000da3565b9050919050565b5f819050919050565b62000df08362000db5565b62000e0862000dff8262000ddc565b84845462000d4e565b825550505050565b5f90565b62000e1e62000e10565b62000e2b81848462000de5565b505050565b5b8181101562000e525762000e465f8262000e14565b60018101905062000e31565b5050565b601f82111562000ea15762000e6b8162000d21565b62000e768462000d33565b8101602085101562000e86578190505b62000e9e62000e958562000d33565b83018262000e30565b50505b505050565b5f82821c905092915050565b5f62000ec35f198460080262000ea6565b1980831691505092915050565b5f62000edd838362000eb2565b9150826002028217905092915050565b62000ef88262000c89565b67ffffffffffffffff81111562000f145762000f1362000c93565b5b62000f20825462000ced565b62000f2d82828562000e56565b5f60209050601f83116001811462000f63575f841562000f4e578287015190505b62000f5a858262000ed0565b86555062000fc9565b601f19841662000f738662000d21565b5f5b8281101562000f9c5784890151825560018201915060208501945060208101905062000f75565b8683101562000fbc578489015162000fb8601f89168262000eb2565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200100a8262000da3565b9150620010178362000da3565b9250828202620010278162000da3565b9150828204841483151762001041576200104062000fd1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010818262000da3565b91506200108e8362000da3565b925082620010a157620010a062001048565b5b828204905092915050565b5f60ff82169050919050565b5f620010c482620010ac565b9150620010d183620010ac565b9250828201905060ff811115620010ed57620010ec62000fd1565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001139601f83620010f3565b9150620011468262001103565b602082019050919050565b5f6020820190508181035f8301526200116a816200112b565b9050919050565b5f6200117d8262000da3565b91506200118a8362000da3565b9250828201905080821115620011a557620011a462000fd1565b5b92915050565b620011b68162000da3565b82525050565b5f602082019050620011d15f830184620011ab565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62001233602483620010f3565b91506200124082620011d7565b604082019050919050565b5f6020820190508181035f830152620012648162001225565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620012c7602283620010f3565b9150620012d4826200126b565b604082019050919050565b5f6020820190508181035f830152620012f881620012b9565b9050919050565b6080516148676200133b5f395f8181611a8601528181612fa00152818161307f015281816130a60152818161313c015261316301526148675ff3fe608060405260043610610254575f3560e01c8063715018a611610138578063b8863115116100b5578063d3f6a15711610079578063d3f6a157146108ea578063dd62ed3e14610912578063e16830a81461094e578063f2fde38b14610976578063f5b3c3bf1461099e578063f887ea40146109da5761025b565b8063b886311514610817578063c024666814610841578063c16dd4a414610869578063c18bc19514610891578063d212a69a146108b95761025b565b806395d89b41116100fc57806395d89b411461070f57806396880b17146107395780639fccce3214610775578063a457c2d71461079f578063a9059cbb146107db5761025b565b8063715018a6146106555780637571336a1461066b5780638cd4426d146106935780638da5cb5b146106bb5780638ea5220f146106e55761025b565b806323b872dd116101d157806349bd5a5e1161019557806349bd5a5e146105255780634fbee1931461054f578063555467a11461058b5780636ddd1713146105c7578063706f6937146105f157806370a08231146106195761025b565b806323b872dd14610433578063313ce5671461046f5780633265e8461461049957806339509351146104c1578063455a4396146104fd5761025b565b806318160ddd1161021857806318160ddd146103515780631a8145bb1461037b5780631c6e8a75146103a55780631cdd3be3146103cd5780631f3fed8f146104095761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c557806311a582c314610301578063144ca74b146103295761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610a04565b6040516102809190613297565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa919061334c565b610a94565b6040516102bc91906133a4565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e691906133bd565b610ab6565b6040516102f891906133a4565b60405180910390f35b34801561030c575f80fd5b50610327600480360381019061032291906133e8565b610ad3565b005b348015610334575f80fd5b5061034f600480360381019061034a919061334c565b610c15565b005b34801561035c575f80fd5b50610365610dae565b6040516103729190613435565b60405180910390f35b348015610386575f80fd5b5061038f610db7565b60405161039c9190613435565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c69190613478565b610dbd565b005b3480156103d8575f80fd5b506103f360048036038101906103ee91906133bd565b610de2565b60405161040091906133a4565b60405180910390f35b348015610414575f80fd5b5061041d610dff565b60405161042a9190613435565b60405180910390f35b34801561043e575f80fd5b50610459600480360381019061045491906134a3565b610e05565b60405161046691906133a4565b60405180910390f35b34801561047a575f80fd5b50610483610e33565b604051610490919061350e565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190613551565b610e3b565b005b3480156104cc575f80fd5b506104e760048036038101906104e2919061334c565b611073565b6040516104f491906133a4565b60405180910390f35b348015610508575f80fd5b50610523600480360381019061051e91906135da565b6110a9565b005b348015610530575f80fd5b50610539611109565b6040516105469190613627565b60405180910390f35b34801561055a575f80fd5b50610575600480360381019061057091906133bd565b61112e565b60405161058291906133a4565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac9190613640565b611180565b6040516105be91906133a4565b60405180910390f35b3480156105d2575f80fd5b506105db611199565b6040516105e891906133a4565b60405180910390f35b3480156105fc575f80fd5b5061061760048036038101906106129190613721565b6111ac565b005b348015610624575f80fd5b5061063f600480360381019061063a91906133bd565b611303565b60405161064c9190613435565b60405180910390f35b348015610660575f80fd5b50610669611348565b005b348015610676575f80fd5b50610691600480360381019061068c91906135da565b61135b565b005b34801561069e575f80fd5b506106b960048036038101906106b4919061334c565b6113bb565b005b3480156106c6575f80fd5b506106cf611443565b6040516106dc9190613627565b60405180910390f35b3480156106f0575f80fd5b506106f961146b565b6040516107069190613627565b60405180910390f35b34801561071a575f80fd5b50610723611490565b6040516107309190613297565b60405180910390f35b348015610744575f80fd5b5061075f600480360381019061075a91906133bd565b611520565b60405161076c91906133a4565b60405180910390f35b348015610780575f80fd5b5061078961153d565b6040516107969190613435565b60405180910390f35b3480156107aa575f80fd5b506107c560048036038101906107c0919061334c565b611543565b6040516107d291906133a4565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc919061334c565b6115b8565b60405161080e91906133a4565b60405180910390f35b348015610822575f80fd5b5061082b6115da565b60405161083891906133a4565b60405180910390f35b34801561084c575f80fd5b50610867600480360381019061086291906135da565b6115ed565b005b348015610874575f80fd5b5061088f600480360381019061088a91906135da565b61164d565b005b34801561089c575f80fd5b506108b760048036038101906108b29190613640565b61173c565b005b3480156108c4575f80fd5b506108cd6117e2565b6040516108e198979695949392919061379f565b60405180910390f35b3480156108f5575f80fd5b50610910600480360381019061090b919061381b565b611877565b005b34801561091d575f80fd5b506109386004803603810190610933919061381b565b611903565b6040516109459190613435565b60405180910390f35b348015610959575f80fd5b50610974600480360381019061096f91906135da565b611985565b005b348015610981575f80fd5b5061099c600480360381019061099791906133bd565b6119e5565b005b3480156109a9575f80fd5b506109c460048036038101906109bf91906133bd565b611a67565b6040516109d191906133a4565b60405180910390f35b3480156109e5575f80fd5b506109ee611a84565b6040516109fb91906138b4565b60405180910390f35b606060038054610a13906138fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906138fa565b8015610a8a5780601f10610a6157610100808354040283529160200191610a8a565b820191905f5260205f20905b815481529060010190602001808311610a6d57829003601f168201915b5050505050905090565b5f80610a9e611aa8565b9050610aab818585611aaf565b600191505092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b610adb611c72565b6064610ae5610dae565b610aef9190613984565b6103e883610afb610dae565b610b0591906139b4565b610b0f9190613984565b1015610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790613a65565b60405180910390fd5b6064610b5a610dae565b610b649190613984565b6103e882610b70610dae565b610b7a91906139b4565b610b849190613984565b1015610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613af3565b60405180910390fd5b6103e882610bd1610dae565b610bdb91906139b4565b610be59190613984565b6009819055506103e881610bf7610dae565b610c0191906139b4565b610c0b9190613984565b600a819055505050565b610c1d611c72565b6001600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550610c658143611cf090919063ffffffff16565b6012819055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600254905090565b60105481565b610dc5611c72565b80600d60016101000a81548160ff02191690831515021790555050565b6017602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b5f80610e0f611aa8565b9050610e1c858285611d05565b610e27858585611d90565b60019150509392505050565b5f6012905090565b610e43611c72565b85600e5f0160016101000a81548160ff021916908360ff16021790555084600e5f0160036101000a81548160ff021916908360ff16021790555083600e5f0160026101000a81548160ff021916908360ff160217905550600e5f0160029054906101000a900460ff16600e5f0160039054906101000a900460ff16600e5f0160019054906101000a900460ff16610eda9190613b11565b610ee49190613b11565b600e5f015f6101000a81548160ff021916908360ff16021790555082600e5f0160056101000a81548160ff021916908360ff16021790555081600e5f0160076101000a81548160ff021916908360ff16021790555080600e5f0160066101000a81548160ff021916908360ff160217905550600e5f0160069054906101000a900460ff16600e5f0160079054906101000a900460ff16600e5f0160059054906101000a900460ff16610f969190613b11565b610fa09190613b11565b600e5f0160046101000a81548160ff021916908360ff160217905550601e600e5f015f9054906101000a900460ff1660ff161115611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90613b8f565b60405180910390fd5b601e600e5f0160049054906101000a900460ff1660ff16111561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290613b8f565b60405180910390fd5b505050505050565b5f8061107d611aa8565b905061109e81858561108f8589611903565b6110999190613bad565b611aaf565b600191505092915050565b6110b1611c72565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611189611c72565b81600c8190555060019050919050565b600d60019054906101000a900460ff1681565b6111b4611c72565b8181905084849050146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613c50565b60405180910390fd5b5f805b858590508110156112445783838281811061121d5761121c613c6e565b5b905060200201358261122f9190613bad565b9150808061123c90613c9b565b9150506111ff565b508061124f30611303565b1015611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790613d2c565b60405180910390fd5b5f5b858590508110156112fb576112e8308787848181106112b4576112b3613c6e565b5b90506020020160208101906112c991906133bd565b8686858181106112dc576112db613c6e565b5b90506020020135611d90565b80806112f390613c9b565b915050611292565b505050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611350611c72565b6113595f6128ef565b565b611363611c72565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113c3611c72565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113fe929190613d4a565b6020604051808303815f875af115801561141a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143e9190613d85565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461149f906138fa565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906138fa565b80156115165780601f106114ed57610100808354040283529160200191611516565b820191905f5260205f20905b8154815290600101906020018083116114f957829003601f168201915b5050505050905090565b6015602052805f5260405f205f915054906101000a900460ff1681565b60115481565b5f8061154d611aa8565b90505f61155a8286611903565b90508381101561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613e20565b60405180910390fd5b6115ac8286868403611aaf565b60019250505092915050565b5f806115c2611aa8565b90506115cf818585611d90565b600191505092915050565b600d60029054906101000a900460ff1681565b6115f5611c72565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611655611c72565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90613e88565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611744611c72565b606461174e610dae565b6117589190613984565b6103e882611764610dae565b61176e91906139b4565b6117789190613984565b10156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090613f16565b60405180910390fd5b6103e8816117c5610dae565b6117cf91906139b4565b6117d99190613984565b600b8190555050565b600e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b61187f611c72565b8160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61198d611c72565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6119ed611c72565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613fa4565b60405180910390fd5b611a64816128ef565b50565b6016602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614032565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b82906140c0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c659190613435565b60405180910390a3505050565b611c7a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16611c98611443565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614128565b60405180910390fd5b565b5f8183611cfd9190613bad565b905092915050565b5f611d108484611903565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d8a5781811015611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614190565b60405180910390fd5b611d898484848403611aaf565b5b50505050565b5f8103611da757611da283835f6129b2565b6128ea565b611daf611443565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e1d5750611ded611443565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e365750600d60029054906101000a900460ff16155b1561228357600d5f9054906101000a900460ff16611f295760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ee9575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f906141f8565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611fc6575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561201557600954811115612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614260565b60405180910390fd5b6120fe565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120b2575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120fd57600a548111156120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f3906142c8565b60405180910390fd5b5b5b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121a557600b5461215883611303565b826121639190613bad565b11156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90614330565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612243575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990614398565b60405180910390fd5b5b5f61228d30611303565b90505f600c5482101590508080156122b15750600d60019054906101000a900460ff165b80156122ca5750600d60029054906101000a900460ff16155b801561231c575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561236f575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123c2575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612405576001600d60026101000a81548160ff0219169083151502179055506123ea612c1e565b5f600d60026101000a81548160ff0219169083151502179055505b5f600d60029054906101000a900460ff1615905060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806124b4575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124bd575f90505b80156128db575f60125443101561255c576124f560646124e7606388612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90506063605e8261250691906139b4565b6125109190613984565b600f5f8282546125209190613bad565b92505081905550606360058261253691906139b4565b6125409190613984565b60115f8282546125509190613bad565b925050819055506128b7565b60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c557505f600e5f0160049054906101000a900460ff1660ff16115b1561270d5761260460646125f6600e5f0160049054906101000a900460ff1660ff1688612eba90919063ffffffff16565b612ecf90919063ffffffff16565b9050600e5f0160049054906101000a900460ff1660ff16600e5f0160079054906101000a900460ff1660ff168261263b91906139b4565b6126459190613984565b60105f8282546126559190613bad565b92505081905550600e5f0160049054906101000a900460ff1660ff16600e5f0160059054906101000a900460ff1660ff168261269191906139b4565b61269b9190613984565b600f5f8282546126ab9190613bad565b92505081905550600e5f0160049054906101000a900460ff1660ff16600e5f0160069054906101000a900460ff1660ff16826126e791906139b4565b6126f19190613984565b60115f8282546127019190613bad565b925050819055506128b6565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561277557505f600e5f015f9054906101000a900460ff1660ff16115b156128b5576127b360646127a5600e5f015f9054906101000a900460ff1660ff1688612eba90919063ffffffff16565b612ecf90919063ffffffff16565b9050600e5f015f9054906101000a900460ff1660ff16600e5f0160039054906101000a900460ff1660ff16826127e991906139b4565b6127f39190613984565b60105f8282546128039190613bad565b92505081905550600e5f015f9054906101000a900460ff1660ff16600e5f0160019054906101000a900460ff1660ff168261283e91906139b4565b6128489190613984565b600f5f8282546128589190613bad565b92505081905550600e5f015f9054906101000a900460ff1660ff16600e5f0160029054906101000a900460ff1660ff168261289391906139b4565b61289d9190613984565b60115f8282546128ad9190613bad565b925050819055505b5b5b5f8111156128cb576128ca8730836129b2565b5b80856128d791906143b6565b9450505b6128e68686866129b2565b5050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1790614459565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a85906144e7565b60405180910390fd5b612a99838383612ee4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1390614575565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c059190613435565b60405180910390a3612c18848484612ee9565b50505050565b5f612c2830611303565b90505f601154600f54601054612c3e9190613bad565b612c489190613bad565b90505f821480612c5757505f81145b15612c63575050612eb8565b600c54821115612c7357600c5491505b5f60028260105485612c8591906139b4565b612c8f9190613984565b612c999190613984565b90505f612caf8285612eee90919063ffffffff16565b90505f479050612cbe82612f03565b5f612cd28247612eee90919063ffffffff16565b90505f612cfc86612cee600f5485612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90505f612d2687612d1860115486612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90505f8183612d359190613bad565b84612d4091906143b6565b90505f6010819055505f600f819055505f6011819055505f87118015612d6557505f81115b15612dae57612d748782613136565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612da5929190614593565b60405180910390a15b5f612dc28447612eee90919063ffffffff16565b1115612e405760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612e168547612eee90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612e3e573d5f803e3d5ffd5b505b5f471115612eae5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612eac573d5f803e3d5ffd5b505b5050505050505050505b565b5f8183612ec791906139b4565b905092915050565b5f8183612edc9190613984565b905092915050565b505050565b505050565b5f8183612efb91906143b6565b905092915050565b5f600267ffffffffffffffff811115612f1f57612f1e6145ba565b5b604051908082528060200260200182016040528015612f4d5781602001602082028036833780820191505090505b50905030815f81518110612f6457612f63613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613007573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302b91906145fb565b8160018151811061303f5761303e613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130a4307f000000000000000000000000000000000000000000000000000000000000000084611aaf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613105959493929190614716565b5f604051808303815f87803b15801561311c575f80fd5b505af115801561312e573d5f803e3d5ffd5b505050505050565b613161307f000000000000000000000000000000000000000000000000000000000000000084611aaf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016131c59695949392919061476e565b60606040518083038185885af11580156131e1573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061320691906147e1565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613244578082015181840152602081019050613229565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132698261320d565b6132738185613217565b9350613283818560208601613227565b61328c8161324f565b840191505092915050565b5f6020820190508181035f8301526132af818461325f565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132e8826132bf565b9050919050565b6132f8816132de565b8114613302575f80fd5b50565b5f81359050613313816132ef565b92915050565b5f819050919050565b61332b81613319565b8114613335575f80fd5b50565b5f8135905061334681613322565b92915050565b5f8060408385031215613362576133616132b7565b5b5f61336f85828601613305565b925050602061338085828601613338565b9150509250929050565b5f8115159050919050565b61339e8161338a565b82525050565b5f6020820190506133b75f830184613395565b92915050565b5f602082840312156133d2576133d16132b7565b5b5f6133df84828501613305565b91505092915050565b5f80604083850312156133fe576133fd6132b7565b5b5f61340b85828601613338565b925050602061341c85828601613338565b9150509250929050565b61342f81613319565b82525050565b5f6020820190506134485f830184613426565b92915050565b6134578161338a565b8114613461575f80fd5b50565b5f813590506134728161344e565b92915050565b5f6020828403121561348d5761348c6132b7565b5b5f61349a84828501613464565b91505092915050565b5f805f606084860312156134ba576134b96132b7565b5b5f6134c786828701613305565b93505060206134d886828701613305565b92505060406134e986828701613338565b9150509250925092565b5f60ff82169050919050565b613508816134f3565b82525050565b5f6020820190506135215f8301846134ff565b92915050565b613530816134f3565b811461353a575f80fd5b50565b5f8135905061354b81613527565b92915050565b5f805f805f8060c0878903121561356b5761356a6132b7565b5b5f61357889828a0161353d565b965050602061358989828a0161353d565b955050604061359a89828a0161353d565b94505060606135ab89828a0161353d565b93505060806135bc89828a0161353d565b92505060a06135cd89828a0161353d565b9150509295509295509295565b5f80604083850312156135f0576135ef6132b7565b5b5f6135fd85828601613305565b925050602061360e85828601613464565b9150509250929050565b613621816132de565b82525050565b5f60208201905061363a5f830184613618565b92915050565b5f60208284031215613655576136546132b7565b5b5f61366284828501613338565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261368c5761368b61366b565b5b8235905067ffffffffffffffff8111156136a9576136a861366f565b5b6020830191508360208202830111156136c5576136c4613673565b5b9250929050565b5f8083601f8401126136e1576136e061366b565b5b8235905067ffffffffffffffff8111156136fe576136fd61366f565b5b60208301915083602082028301111561371a57613719613673565b5b9250929050565b5f805f8060408587031215613739576137386132b7565b5b5f85013567ffffffffffffffff811115613756576137556132bb565b5b61376287828801613677565b9450945050602085013567ffffffffffffffff811115613785576137846132bb565b5b613791878288016136cc565b925092505092959194509250565b5f610100820190506137b35f83018b6134ff565b6137c0602083018a6134ff565b6137cd60408301896134ff565b6137da60608301886134ff565b6137e760808301876134ff565b6137f460a08301866134ff565b61380160c08301856134ff565b61380e60e08301846134ff565b9998505050505050505050565b5f8060408385031215613831576138306132b7565b5b5f61383e85828601613305565b925050602061384f85828601613305565b9150509250929050565b5f819050919050565b5f61387c613877613872846132bf565b613859565b6132bf565b9050919050565b5f61388d82613862565b9050919050565b5f61389e82613883565b9050919050565b6138ae81613894565b82525050565b5f6020820190506138c75f8301846138a5565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391157607f821691505b602082108103613924576139236138cd565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61398e82613319565b915061399983613319565b9250826139a9576139a861392a565b5b828204905092915050565b5f6139be82613319565b91506139c983613319565b92508282026139d781613319565b915082820484148315176139ee576139ed613957565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f613a4f602383613217565b9150613a5a826139f5565b604082019050919050565b5f6020820190508181035f830152613a7c81613a43565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f613add602483613217565b9150613ae882613a83565b604082019050919050565b5f6020820190508181035f830152613b0a81613ad1565b9050919050565b5f613b1b826134f3565b9150613b26836134f3565b9250828201905060ff811115613b3f57613b3e613957565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f613b79601d83613217565b9150613b8482613b45565b602082019050919050565b5f6020820190508181035f830152613ba681613b6d565b9050919050565b5f613bb782613319565b9150613bc283613319565b9250828201905080821115613bda57613bd9613957565b5b92915050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f613c3a602883613217565b9150613c4582613be0565b604082019050919050565b5f6020820190508181035f830152613c6781613c2e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613ca582613319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cd757613cd6613957565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e73206f6e20636f6e74726163740000005f82015250565b5f613d16601d83613217565b9150613d2182613ce2565b602082019050919050565b5f6020820190508181035f830152613d4381613d0a565b9050919050565b5f604082019050613d5d5f830185613618565b613d6a6020830184613426565b9392505050565b5f81519050613d7f8161344e565b92915050565b5f60208284031215613d9a57613d996132b7565b5b5f613da784828501613d71565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e0a602583613217565b9150613e1582613db0565b604082019050919050565b5f6020820190508181035f830152613e3781613dfe565b9050919050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f613e72601783613217565b9150613e7d82613e3e565b602082019050919050565b5f6020820190508181035f830152613e9f81613e66565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f00602283613217565b9150613f0b82613ea6565b604082019050919050565b5f6020820190508181035f830152613f2d81613ef4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613f8e602683613217565b9150613f9982613f34565b604082019050919050565b5f6020820190508181035f830152613fbb81613f82565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61401c602483613217565b915061402782613fc2565b604082019050919050565b5f6020820190508181035f83015261404981614010565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140aa602283613217565b91506140b582614050565b604082019050919050565b5f6020820190508181035f8301526140d78161409e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614112602083613217565b915061411d826140de565b602082019050919050565b5f6020820190508181035f83015261413f81614106565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61417a601d83613217565b915061418582614146565b602082019050919050565b5f6020820190508181035f8301526141a78161416e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6141e2601683613217565b91506141ed826141ae565b602082019050919050565b5f6020820190508181035f83015261420f816141d6565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f61424a601c83613217565b915061425582614216565b602082019050919050565b5f6020820190508181035f8301526142778161423e565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f6142b2601d83613217565b91506142bd8261427e565b602082019050919050565b5f6020820190508181035f8301526142df816142a6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61431a601383613217565b9150614325826142e6565b602082019050919050565b5f6020820190508181035f8301526143478161430e565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f614382601383613217565b915061438d8261434e565b602082019050919050565b5f6020820190508181035f8301526143af81614376565b9050919050565b5f6143c082613319565b91506143cb83613319565b92508282039050818111156143e3576143e2613957565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614443602583613217565b915061444e826143e9565b604082019050919050565b5f6020820190508181035f83015261447081614437565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144d1602383613217565b91506144dc82614477565b604082019050919050565b5f6020820190508181035f8301526144fe816144c5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61455f602683613217565b915061456a82614505565b604082019050919050565b5f6020820190508181035f83015261458c81614553565b9050919050565b5f6040820190506145a65f830185613426565b6145b36020830184613426565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506145f5816132ef565b92915050565b5f602082840312156146105761460f6132b7565b5b5f61461d848285016145e7565b91505092915050565b5f819050919050565b5f61464961464461463f84614626565b613859565b613319565b9050919050565b6146598161462f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614691816132de565b82525050565b5f6146a28383614688565b60208301905092915050565b5f602082019050919050565b5f6146c48261465f565b6146ce8185614669565b93506146d983614679565b805f5b838110156147095781516146f08882614697565b97506146fb836146ae565b9250506001810190506146dc565b5085935050505092915050565b5f60a0820190506147295f830188613426565b6147366020830187614650565b818103604083015261474881866146ba565b90506147576060830185613618565b6147646080830184613426565b9695505050505050565b5f60c0820190506147815f830189613618565b61478e6020830188613426565b61479b6040830187614650565b6147a86060830186614650565b6147b56080830185613618565b6147c260a0830184613426565b979650505050505050565b5f815190506147db81613322565b92915050565b5f805f606084860312156147f8576147f76132b7565b5b5f614805868287016147cd565b9350506020614816868287016147cd565b9250506040614827868287016147cd565b915050925092509256fea264697066735822122059f60563c679f79a7af7b02412219b4ff725ca94b6bd1be8d91b9fdcb10a97e264736f6c63430008140033
Deployed Bytecode
0x608060405260043610610254575f3560e01c8063715018a611610138578063b8863115116100b5578063d3f6a15711610079578063d3f6a157146108ea578063dd62ed3e14610912578063e16830a81461094e578063f2fde38b14610976578063f5b3c3bf1461099e578063f887ea40146109da5761025b565b8063b886311514610817578063c024666814610841578063c16dd4a414610869578063c18bc19514610891578063d212a69a146108b95761025b565b806395d89b41116100fc57806395d89b411461070f57806396880b17146107395780639fccce3214610775578063a457c2d71461079f578063a9059cbb146107db5761025b565b8063715018a6146106555780637571336a1461066b5780638cd4426d146106935780638da5cb5b146106bb5780638ea5220f146106e55761025b565b806323b872dd116101d157806349bd5a5e1161019557806349bd5a5e146105255780634fbee1931461054f578063555467a11461058b5780636ddd1713146105c7578063706f6937146105f157806370a08231146106195761025b565b806323b872dd14610433578063313ce5671461046f5780633265e8461461049957806339509351146104c1578063455a4396146104fd5761025b565b806318160ddd1161021857806318160ddd146103515780631a8145bb1461037b5780631c6e8a75146103a55780631cdd3be3146103cd5780631f3fed8f146104095761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c557806311a582c314610301578063144ca74b146103295761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610a04565b6040516102809190613297565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa919061334c565b610a94565b6040516102bc91906133a4565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e691906133bd565b610ab6565b6040516102f891906133a4565b60405180910390f35b34801561030c575f80fd5b50610327600480360381019061032291906133e8565b610ad3565b005b348015610334575f80fd5b5061034f600480360381019061034a919061334c565b610c15565b005b34801561035c575f80fd5b50610365610dae565b6040516103729190613435565b60405180910390f35b348015610386575f80fd5b5061038f610db7565b60405161039c9190613435565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c69190613478565b610dbd565b005b3480156103d8575f80fd5b506103f360048036038101906103ee91906133bd565b610de2565b60405161040091906133a4565b60405180910390f35b348015610414575f80fd5b5061041d610dff565b60405161042a9190613435565b60405180910390f35b34801561043e575f80fd5b50610459600480360381019061045491906134a3565b610e05565b60405161046691906133a4565b60405180910390f35b34801561047a575f80fd5b50610483610e33565b604051610490919061350e565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190613551565b610e3b565b005b3480156104cc575f80fd5b506104e760048036038101906104e2919061334c565b611073565b6040516104f491906133a4565b60405180910390f35b348015610508575f80fd5b50610523600480360381019061051e91906135da565b6110a9565b005b348015610530575f80fd5b50610539611109565b6040516105469190613627565b60405180910390f35b34801561055a575f80fd5b50610575600480360381019061057091906133bd565b61112e565b60405161058291906133a4565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac9190613640565b611180565b6040516105be91906133a4565b60405180910390f35b3480156105d2575f80fd5b506105db611199565b6040516105e891906133a4565b60405180910390f35b3480156105fc575f80fd5b5061061760048036038101906106129190613721565b6111ac565b005b348015610624575f80fd5b5061063f600480360381019061063a91906133bd565b611303565b60405161064c9190613435565b60405180910390f35b348015610660575f80fd5b50610669611348565b005b348015610676575f80fd5b50610691600480360381019061068c91906135da565b61135b565b005b34801561069e575f80fd5b506106b960048036038101906106b4919061334c565b6113bb565b005b3480156106c6575f80fd5b506106cf611443565b6040516106dc9190613627565b60405180910390f35b3480156106f0575f80fd5b506106f961146b565b6040516107069190613627565b60405180910390f35b34801561071a575f80fd5b50610723611490565b6040516107309190613297565b60405180910390f35b348015610744575f80fd5b5061075f600480360381019061075a91906133bd565b611520565b60405161076c91906133a4565b60405180910390f35b348015610780575f80fd5b5061078961153d565b6040516107969190613435565b60405180910390f35b3480156107aa575f80fd5b506107c560048036038101906107c0919061334c565b611543565b6040516107d291906133a4565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc919061334c565b6115b8565b60405161080e91906133a4565b60405180910390f35b348015610822575f80fd5b5061082b6115da565b60405161083891906133a4565b60405180910390f35b34801561084c575f80fd5b50610867600480360381019061086291906135da565b6115ed565b005b348015610874575f80fd5b5061088f600480360381019061088a91906135da565b61164d565b005b34801561089c575f80fd5b506108b760048036038101906108b29190613640565b61173c565b005b3480156108c4575f80fd5b506108cd6117e2565b6040516108e198979695949392919061379f565b60405180910390f35b3480156108f5575f80fd5b50610910600480360381019061090b919061381b565b611877565b005b34801561091d575f80fd5b506109386004803603810190610933919061381b565b611903565b6040516109459190613435565b60405180910390f35b348015610959575f80fd5b50610974600480360381019061096f91906135da565b611985565b005b348015610981575f80fd5b5061099c600480360381019061099791906133bd565b6119e5565b005b3480156109a9575f80fd5b506109c460048036038101906109bf91906133bd565b611a67565b6040516109d191906133a4565b60405180910390f35b3480156109e5575f80fd5b506109ee611a84565b6040516109fb91906138b4565b60405180910390f35b606060038054610a13906138fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906138fa565b8015610a8a5780601f10610a6157610100808354040283529160200191610a8a565b820191905f5260205f20905b815481529060010190602001808311610a6d57829003601f168201915b5050505050905090565b5f80610a9e611aa8565b9050610aab818585611aaf565b600191505092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b610adb611c72565b6064610ae5610dae565b610aef9190613984565b6103e883610afb610dae565b610b0591906139b4565b610b0f9190613984565b1015610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790613a65565b60405180910390fd5b6064610b5a610dae565b610b649190613984565b6103e882610b70610dae565b610b7a91906139b4565b610b849190613984565b1015610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613af3565b60405180910390fd5b6103e882610bd1610dae565b610bdb91906139b4565b610be59190613984565b6009819055506103e881610bf7610dae565b610c0191906139b4565b610c0b9190613984565b600a819055505050565b610c1d611c72565b6001600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550610c658143611cf090919063ffffffff16565b6012819055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f600254905090565b60105481565b610dc5611c72565b80600d60016101000a81548160ff02191690831515021790555050565b6017602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b5f80610e0f611aa8565b9050610e1c858285611d05565b610e27858585611d90565b60019150509392505050565b5f6012905090565b610e43611c72565b85600e5f0160016101000a81548160ff021916908360ff16021790555084600e5f0160036101000a81548160ff021916908360ff16021790555083600e5f0160026101000a81548160ff021916908360ff160217905550600e5f0160029054906101000a900460ff16600e5f0160039054906101000a900460ff16600e5f0160019054906101000a900460ff16610eda9190613b11565b610ee49190613b11565b600e5f015f6101000a81548160ff021916908360ff16021790555082600e5f0160056101000a81548160ff021916908360ff16021790555081600e5f0160076101000a81548160ff021916908360ff16021790555080600e5f0160066101000a81548160ff021916908360ff160217905550600e5f0160069054906101000a900460ff16600e5f0160079054906101000a900460ff16600e5f0160059054906101000a900460ff16610f969190613b11565b610fa09190613b11565b600e5f0160046101000a81548160ff021916908360ff160217905550601e600e5f015f9054906101000a900460ff1660ff161115611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90613b8f565b60405180910390fd5b601e600e5f0160049054906101000a900460ff1660ff16111561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290613b8f565b60405180910390fd5b505050505050565b5f8061107d611aa8565b905061109e81858561108f8589611903565b6110999190613bad565b611aaf565b600191505092915050565b6110b1611c72565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611189611c72565b81600c8190555060019050919050565b600d60019054906101000a900460ff1681565b6111b4611c72565b8181905084849050146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613c50565b60405180910390fd5b5f805b858590508110156112445783838281811061121d5761121c613c6e565b5b905060200201358261122f9190613bad565b9150808061123c90613c9b565b9150506111ff565b508061124f30611303565b1015611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790613d2c565b60405180910390fd5b5f5b858590508110156112fb576112e8308787848181106112b4576112b3613c6e565b5b90506020020160208101906112c991906133bd565b8686858181106112dc576112db613c6e565b5b90506020020135611d90565b80806112f390613c9b565b915050611292565b505050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611350611c72565b6113595f6128ef565b565b611363611c72565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113c3611c72565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113fe929190613d4a565b6020604051808303815f875af115801561141a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143e9190613d85565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461149f906138fa565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb906138fa565b80156115165780601f106114ed57610100808354040283529160200191611516565b820191905f5260205f20905b8154815290600101906020018083116114f957829003601f168201915b5050505050905090565b6015602052805f5260405f205f915054906101000a900460ff1681565b60115481565b5f8061154d611aa8565b90505f61155a8286611903565b90508381101561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613e20565b60405180910390fd5b6115ac8286868403611aaf565b60019250505092915050565b5f806115c2611aa8565b90506115cf818585611d90565b600191505092915050565b600d60029054906101000a900460ff1681565b6115f5611c72565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611655611c72565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db90613e88565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611744611c72565b606461174e610dae565b6117589190613984565b6103e882611764610dae565b61176e91906139b4565b6117789190613984565b10156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090613f16565b60405180910390fd5b6103e8816117c5610dae565b6117cf91906139b4565b6117d99190613984565b600b8190555050565b600e805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b61187f611c72565b8160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61198d611c72565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6119ed611c72565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613fa4565b60405180910390fd5b611a64816128ef565b50565b6016602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614032565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b82906140c0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c659190613435565b60405180910390a3505050565b611c7a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16611c98611443565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614128565b60405180910390fd5b565b5f8183611cfd9190613bad565b905092915050565b5f611d108484611903565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d8a5781811015611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614190565b60405180910390fd5b611d898484848403611aaf565b5b50505050565b5f8103611da757611da283835f6129b2565b6128ea565b611daf611443565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e1d5750611ded611443565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e365750600d60029054906101000a900460ff16155b1561228357600d5f9054906101000a900460ff16611f295760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ee9575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f906141f8565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611fc6575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561201557600954811115612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614260565b60405180910390fd5b6120fe565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120b2575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120fd57600a548111156120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f3906142c8565b60405180910390fd5b5b5b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121a557600b5461215883611303565b826121639190613bad565b11156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90614330565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612243575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990614398565b60405180910390fd5b5b5f61228d30611303565b90505f600c5482101590508080156122b15750600d60019054906101000a900460ff165b80156122ca5750600d60029054906101000a900460ff16155b801561231c575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561236f575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123c2575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612405576001600d60026101000a81548160ff0219169083151502179055506123ea612c1e565b5f600d60026101000a81548160ff0219169083151502179055505b5f600d60029054906101000a900460ff1615905060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806124b4575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124bd575f90505b80156128db575f60125443101561255c576124f560646124e7606388612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90506063605e8261250691906139b4565b6125109190613984565b600f5f8282546125209190613bad565b92505081905550606360058261253691906139b4565b6125409190613984565b60115f8282546125509190613bad565b925050819055506128b7565b60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c557505f600e5f0160049054906101000a900460ff1660ff16115b1561270d5761260460646125f6600e5f0160049054906101000a900460ff1660ff1688612eba90919063ffffffff16565b612ecf90919063ffffffff16565b9050600e5f0160049054906101000a900460ff1660ff16600e5f0160079054906101000a900460ff1660ff168261263b91906139b4565b6126459190613984565b60105f8282546126559190613bad565b92505081905550600e5f0160049054906101000a900460ff1660ff16600e5f0160059054906101000a900460ff1660ff168261269191906139b4565b61269b9190613984565b600f5f8282546126ab9190613bad565b92505081905550600e5f0160049054906101000a900460ff1660ff16600e5f0160069054906101000a900460ff1660ff16826126e791906139b4565b6126f19190613984565b60115f8282546127019190613bad565b925050819055506128b6565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561277557505f600e5f015f9054906101000a900460ff1660ff16115b156128b5576127b360646127a5600e5f015f9054906101000a900460ff1660ff1688612eba90919063ffffffff16565b612ecf90919063ffffffff16565b9050600e5f015f9054906101000a900460ff1660ff16600e5f0160039054906101000a900460ff1660ff16826127e991906139b4565b6127f39190613984565b60105f8282546128039190613bad565b92505081905550600e5f015f9054906101000a900460ff1660ff16600e5f0160019054906101000a900460ff1660ff168261283e91906139b4565b6128489190613984565b600f5f8282546128589190613bad565b92505081905550600e5f015f9054906101000a900460ff1660ff16600e5f0160029054906101000a900460ff1660ff168261289391906139b4565b61289d9190613984565b60115f8282546128ad9190613bad565b925050819055505b5b5b5f8111156128cb576128ca8730836129b2565b5b80856128d791906143b6565b9450505b6128e68686866129b2565b5050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1790614459565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a85906144e7565b60405180910390fd5b612a99838383612ee4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1390614575565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c059190613435565b60405180910390a3612c18848484612ee9565b50505050565b5f612c2830611303565b90505f601154600f54601054612c3e9190613bad565b612c489190613bad565b90505f821480612c5757505f81145b15612c63575050612eb8565b600c54821115612c7357600c5491505b5f60028260105485612c8591906139b4565b612c8f9190613984565b612c999190613984565b90505f612caf8285612eee90919063ffffffff16565b90505f479050612cbe82612f03565b5f612cd28247612eee90919063ffffffff16565b90505f612cfc86612cee600f5485612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90505f612d2687612d1860115486612eba90919063ffffffff16565b612ecf90919063ffffffff16565b90505f8183612d359190613bad565b84612d4091906143b6565b90505f6010819055505f600f819055505f6011819055505f87118015612d6557505f81115b15612dae57612d748782613136565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612da5929190614593565b60405180910390a15b5f612dc28447612eee90919063ffffffff16565b1115612e405760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612e168547612eee90919063ffffffff16565b90811502906040515f60405180830381858888f19350505050158015612e3e573d5f803e3d5ffd5b505b5f471115612eae5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612eac573d5f803e3d5ffd5b505b5050505050505050505b565b5f8183612ec791906139b4565b905092915050565b5f8183612edc9190613984565b905092915050565b505050565b505050565b5f8183612efb91906143b6565b905092915050565b5f600267ffffffffffffffff811115612f1f57612f1e6145ba565b5b604051908082528060200260200182016040528015612f4d5781602001602082028036833780820191505090505b50905030815f81518110612f6457612f63613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613007573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302b91906145fb565b8160018151811061303f5761303e613c6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130a4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611aaf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613105959493929190614716565b5f604051808303815f87803b15801561311c575f80fd5b505af115801561312e573d5f803e3d5ffd5b505050505050565b613161307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611aaf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016131c59695949392919061476e565b60606040518083038185885af11580156131e1573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061320691906147e1565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613244578082015181840152602081019050613229565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132698261320d565b6132738185613217565b9350613283818560208601613227565b61328c8161324f565b840191505092915050565b5f6020820190508181035f8301526132af818461325f565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132e8826132bf565b9050919050565b6132f8816132de565b8114613302575f80fd5b50565b5f81359050613313816132ef565b92915050565b5f819050919050565b61332b81613319565b8114613335575f80fd5b50565b5f8135905061334681613322565b92915050565b5f8060408385031215613362576133616132b7565b5b5f61336f85828601613305565b925050602061338085828601613338565b9150509250929050565b5f8115159050919050565b61339e8161338a565b82525050565b5f6020820190506133b75f830184613395565b92915050565b5f602082840312156133d2576133d16132b7565b5b5f6133df84828501613305565b91505092915050565b5f80604083850312156133fe576133fd6132b7565b5b5f61340b85828601613338565b925050602061341c85828601613338565b9150509250929050565b61342f81613319565b82525050565b5f6020820190506134485f830184613426565b92915050565b6134578161338a565b8114613461575f80fd5b50565b5f813590506134728161344e565b92915050565b5f6020828403121561348d5761348c6132b7565b5b5f61349a84828501613464565b91505092915050565b5f805f606084860312156134ba576134b96132b7565b5b5f6134c786828701613305565b93505060206134d886828701613305565b92505060406134e986828701613338565b9150509250925092565b5f60ff82169050919050565b613508816134f3565b82525050565b5f6020820190506135215f8301846134ff565b92915050565b613530816134f3565b811461353a575f80fd5b50565b5f8135905061354b81613527565b92915050565b5f805f805f8060c0878903121561356b5761356a6132b7565b5b5f61357889828a0161353d565b965050602061358989828a0161353d565b955050604061359a89828a0161353d565b94505060606135ab89828a0161353d565b93505060806135bc89828a0161353d565b92505060a06135cd89828a0161353d565b9150509295509295509295565b5f80604083850312156135f0576135ef6132b7565b5b5f6135fd85828601613305565b925050602061360e85828601613464565b9150509250929050565b613621816132de565b82525050565b5f60208201905061363a5f830184613618565b92915050565b5f60208284031215613655576136546132b7565b5b5f61366284828501613338565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261368c5761368b61366b565b5b8235905067ffffffffffffffff8111156136a9576136a861366f565b5b6020830191508360208202830111156136c5576136c4613673565b5b9250929050565b5f8083601f8401126136e1576136e061366b565b5b8235905067ffffffffffffffff8111156136fe576136fd61366f565b5b60208301915083602082028301111561371a57613719613673565b5b9250929050565b5f805f8060408587031215613739576137386132b7565b5b5f85013567ffffffffffffffff811115613756576137556132bb565b5b61376287828801613677565b9450945050602085013567ffffffffffffffff811115613785576137846132bb565b5b613791878288016136cc565b925092505092959194509250565b5f610100820190506137b35f83018b6134ff565b6137c0602083018a6134ff565b6137cd60408301896134ff565b6137da60608301886134ff565b6137e760808301876134ff565b6137f460a08301866134ff565b61380160c08301856134ff565b61380e60e08301846134ff565b9998505050505050505050565b5f8060408385031215613831576138306132b7565b5b5f61383e85828601613305565b925050602061384f85828601613305565b9150509250929050565b5f819050919050565b5f61387c613877613872846132bf565b613859565b6132bf565b9050919050565b5f61388d82613862565b9050919050565b5f61389e82613883565b9050919050565b6138ae81613894565b82525050565b5f6020820190506138c75f8301846138a5565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391157607f821691505b602082108103613924576139236138cd565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61398e82613319565b915061399983613319565b9250826139a9576139a861392a565b5b828204905092915050565b5f6139be82613319565b91506139c983613319565b92508282026139d781613319565b915082820484148315176139ee576139ed613957565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f613a4f602383613217565b9150613a5a826139f5565b604082019050919050565b5f6020820190508181035f830152613a7c81613a43565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f613add602483613217565b9150613ae882613a83565b604082019050919050565b5f6020820190508181035f830152613b0a81613ad1565b9050919050565b5f613b1b826134f3565b9150613b26836134f3565b9250828201905060ff811115613b3f57613b3e613957565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f613b79601d83613217565b9150613b8482613b45565b602082019050919050565b5f6020820190508181035f830152613ba681613b6d565b9050919050565b5f613bb782613319565b9150613bc283613319565b9250828201905080821115613bda57613bd9613957565b5b92915050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f613c3a602883613217565b9150613c4582613be0565b604082019050919050565b5f6020820190508181035f830152613c6781613c2e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613ca582613319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cd757613cd6613957565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e73206f6e20636f6e74726163740000005f82015250565b5f613d16601d83613217565b9150613d2182613ce2565b602082019050919050565b5f6020820190508181035f830152613d4381613d0a565b9050919050565b5f604082019050613d5d5f830185613618565b613d6a6020830184613426565b9392505050565b5f81519050613d7f8161344e565b92915050565b5f60208284031215613d9a57613d996132b7565b5b5f613da784828501613d71565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e0a602583613217565b9150613e1582613db0565b604082019050919050565b5f6020820190508181035f830152613e3781613dfe565b9050919050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f613e72601783613217565b9150613e7d82613e3e565b602082019050919050565b5f6020820190508181035f830152613e9f81613e66565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f00602283613217565b9150613f0b82613ea6565b604082019050919050565b5f6020820190508181035f830152613f2d81613ef4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613f8e602683613217565b9150613f9982613f34565b604082019050919050565b5f6020820190508181035f830152613fbb81613f82565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61401c602483613217565b915061402782613fc2565b604082019050919050565b5f6020820190508181035f83015261404981614010565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140aa602283613217565b91506140b582614050565b604082019050919050565b5f6020820190508181035f8301526140d78161409e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614112602083613217565b915061411d826140de565b602082019050919050565b5f6020820190508181035f83015261413f81614106565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61417a601d83613217565b915061418582614146565b602082019050919050565b5f6020820190508181035f8301526141a78161416e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6141e2601683613217565b91506141ed826141ae565b602082019050919050565b5f6020820190508181035f83015261420f816141d6565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f61424a601c83613217565b915061425582614216565b602082019050919050565b5f6020820190508181035f8301526142778161423e565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f6142b2601d83613217565b91506142bd8261427e565b602082019050919050565b5f6020820190508181035f8301526142df816142a6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61431a601383613217565b9150614325826142e6565b602082019050919050565b5f6020820190508181035f8301526143478161430e565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f614382601383613217565b915061438d8261434e565b602082019050919050565b5f6020820190508181035f8301526143af81614376565b9050919050565b5f6143c082613319565b91506143cb83613319565b92508282039050818111156143e3576143e2613957565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614443602583613217565b915061444e826143e9565b604082019050919050565b5f6020820190508181035f83015261447081614437565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144d1602383613217565b91506144dc82614477565b604082019050919050565b5f6020820190508181035f8301526144fe816144c5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61455f602683613217565b915061456a82614505565b604082019050919050565b5f6020820190508181035f83015261458c81614553565b9050919050565b5f6040820190506145a65f830185613426565b6145b36020830184613426565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506145f5816132ef565b92915050565b5f602082840312156146105761460f6132b7565b5b5f61461d848285016145e7565b91505092915050565b5f819050919050565b5f61464961464461463f84614626565b613859565b613319565b9050919050565b6146598161462f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614691816132de565b82525050565b5f6146a28383614688565b60208301905092915050565b5f602082019050919050565b5f6146c48261465f565b6146ce8185614669565b93506146d983614679565b805f5b838110156147095781516146f08882614697565b97506146fb836146ae565b9250506001810190506146dc565b5085935050505092915050565b5f60a0820190506147295f830188613426565b6147366020830187614650565b818103604083015261474881866146ba565b90506147576060830185613618565b6147646080830184613426565b9695505050505050565b5f60c0820190506147815f830189613618565b61478e6020830188613426565b61479b6040830187614650565b6147a86060830186614650565b6147b56080830185613618565b6147c260a0830184613426565b979650505050505050565b5f815190506147db81613322565b92915050565b5f805f606084860312156147f8576147f76132b7565b5b5f614805868287016147cd565b9350506020614816868287016147cd565b9250506040614827868287016147cd565b915050925092509256fea264697066735822122059f60563c679f79a7af7b02412219b4ff725ca94b6bd1be8d91b9fdcb10a97e264736f6c63430008140033
Deployed Bytecode Sourcemap
33345:13286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24622:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34686:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37764:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36657:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23391:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34470:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38509:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35021:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34430:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25403:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23233:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38891:882;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26073:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38619:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33473:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40591:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37596:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33827:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37042:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23562:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15568:103;;;;;;;;;;;;;:::i;:::-;;40075:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38751:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14927:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33528:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34756:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34510:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26814:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23895:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39781:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40227:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38230:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34168:253;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;40412:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24151:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39921:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15826:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34972:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33424;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22262:100;22316:13;22349:5;22342:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:100;:::o;24622:201::-;24705:4;24722:13;24738:12;:10;:12::i;:::-;24722:28;;24761:32;24770:5;24777:7;24786:6;24761:8;:32::i;:::-;24811:4;24804:11;;;24622:201;;;;:::o;34686:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;37764:458::-;14813:13;:11;:13::i;:::-;37926:3:::1;37910:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37900:4;37887:9;37871:13;:11;:13::i;:::-;:25;;;;:::i;:::-;37870:34;;;;:::i;:::-;37869:61;;37861:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;38047:3;38031:13;:11;:13::i;:::-;:19;;;;:::i;:::-;38021:4;38007:10;37991:13;:11;:13::i;:::-;:26;;;;:::i;:::-;37990:35;;;;:::i;:::-;37989:62;;37981:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;38148:4;38135:9;38119:13;:11;:13::i;:::-;:25;;;;:::i;:::-;38118:34;;;;:::i;:::-;38103:12;:49;;;;38210:4;38196:10;38180:13;:11;:13::i;:::-;:26;;;;:::i;:::-;38179:35;;;;:::i;:::-;38163:13;:51;;;;37764:458:::0;;:::o;36657:377::-;14813:13;:11;:13::i;:::-;36751:4:::1;36739:9;;:16;;;;;;;;;;;;;;;;;;36780:4;36766:11;;:18;;;;;;;;;;;;;;;;;;36805:24;36822:6;36805:12;:16;;:24;;;;:::i;:::-;36795:7;:34;;;;36856:4;36840:13;;:20;;;;;;;;;;;;;;;;;;36899:4;36871:10;:25;36890:4;36871:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;36958:4;36914:26;:41;36949:4;36914:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;37022:4;36973:31;:46;37013:4;36973:46;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36657:377:::0;;:::o;23391:108::-;23452:7;23479:12;;23472:19;;23391:108;:::o;34470:33::-;;;;:::o;38509:102::-;14813:13;:11;:13::i;:::-;38596:7:::1;38582:11;;:21;;;;;;;;;;;;;;;;;;38509:102:::0;:::o;35021:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;34430:33::-;;;;:::o;25403:261::-;25500:4;25517:15;25535:12;:10;:12::i;:::-;25517:30;;25558:38;25574:4;25580:7;25589:6;25558:15;:38::i;:::-;25607:27;25617:4;25623:2;25627:6;25607:9;:27::i;:::-;25652:4;25645:11;;;25403:261;;;;;:::o;23233:93::-;23291:5;23316:2;23309:9;;23233:93;:::o;38891:882::-;14813:13;:11;:13::i;:::-;39161:16:::1;39137:5;:21;;;:40;;;;;;;;;;;;;;;;;;39212:16;39188:5;:21;;;:40;;;;;;;;;;;;;;;;;;39257:10;39239:5;:15;;;:28;;;;;;;;;;;;;;;;;;39347:5;:15;;;;;;;;;;;;39323:5;:21;;;;;;;;;;;;39299:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;39278:5;:18;;;:84;;;;;;;;;;;;;;;;;;39400:17;39375:5;:22;;;:42;;;;;;;;;;;;;;;;;;39453:17;39428:5;:22;;;:42;;;;;;;;;;;;;;;;;;39500:11;39481:5;:16;;;:30;;;;;;;;;;;;;;;;;;39594:5;:16;;;;;;;;;;;;39569:5;:22;;;;;;;;;;;;39544:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;39522:5;:19;;;:88;;;;;;;;;;;;;;;;;;39651:2;39629:5;:18;;;;;;;;;;;;:24;;;;39621:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39729:2;39706:5;:19;;;;;;;;;;;;:25;;;;39698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38891:882:::0;;;;;;:::o;26073:238::-;26161:4;26178:13;26194:12;:10;:12::i;:::-;26178:28;;26217:64;26226:5;26233:7;26270:10;26242:25;26252:5;26259:7;26242:9;:25::i;:::-;:38;;;;:::i;:::-;26217:8;:64::i;:::-;26299:4;26292:11;;;26073:238;;;;:::o;38619:124::-;14813:13;:11;:13::i;:::-;38730:5:::1;38704:14;:23;38719:7;38704:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38619:124:::0;;:::o;33473:28::-;;;;;;;;;;;;;:::o;40591:126::-;40657:4;40681:19;:28;40701:7;40681:28;;;;;;;;;;;;;;;;;;;;;;;;;40674:35;;40591:126;;;:::o;37596:160::-;37678:4;14813:13;:11;:13::i;:::-;37717:9:::1;37695:19;:31;;;;37744:4;37737:11;;37596:160:::0;;;:::o;33827:31::-;;;;;;;;;;;;;:::o;37042:546::-;14813:13;:11;:13::i;:::-;37178:6:::1;;:13;;37158:9;;:16;;:33;37150:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37256:12;37288:6:::0;37284:90:::1;37302:9;;:16;;37298:1;:20;37284:90;;;37353:6;;37360:1;37353:9;;;;;;;:::i;:::-;;;;;;;;37346:4;:16;;;;:::i;:::-;37339:23;;37320:3;;;;;:::i;:::-;;;;37284:90;;;;37420:4;37392:24;37410:4;37392:9;:24::i;:::-;:32;;37384:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37473:6;37469:112;37487:9;;:16;;37483:1;:20;37469:112;;;37520:49;37538:4;37545:9;;37555:1;37545:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37559:6;;37566:1;37559:9;;;;;;;:::i;:::-;;;;;;;;37520;:49::i;:::-;37505:3;;;;;:::i;:::-;;;;37469:112;;;;37141:447;37042:546:::0;;;;:::o;23562:127::-;23636:7;23663:9;:18;23673:7;23663:18;;;;;;;;;;;;;;;;23656:25;;23562:127;;;:::o;15568:103::-;14813:13;:11;:13::i;:::-;15633:30:::1;15660:1;15633:18;:30::i;:::-;15568:103::o:0;40075:144::-;14813:13;:11;:13::i;:::-;40207:4:::1;40165:31;:39;40197:6;40165:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40075:144:::0;;:::o;38751:132::-;14813:13;:11;:13::i;:::-;38840:5:::1;38833:22;;;38856:10;38868:6;38833:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38751:132:::0;;:::o;14927:87::-;14973:7;15000:6;;;;;;;;;;;14993:13;;14927:87;:::o;33528:24::-;;;;;;;;;;;;;:::o;22481:104::-;22537:13;22570:7;22563:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22481:104;:::o;34756:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34510:27::-;;;;:::o;26814:436::-;26907:4;26924:13;26940:12;:10;:12::i;:::-;26924:28;;26963:24;26990:25;27000:5;27007:7;26990:9;:25::i;:::-;26963:52;;27054:15;27034:16;:35;;27026:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27147:60;27156:5;27163:7;27191:15;27172:16;:34;27147:8;:60::i;:::-;27238:4;27231:11;;;;26814:436;;;;:::o;23895:193::-;23974:4;23991:13;24007:12;:10;:12::i;:::-;23991:28;;24030;24040:5;24047:2;24051:6;24030:9;:28::i;:::-;24076:4;24069:11;;;23895:193;;;;:::o;33865:22::-;;;;;;;;;;;;;:::o;39781:132::-;14813:13;:11;:13::i;:::-;39897:8:::1;39866:19;:28;39886:7;39866:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39781:132:::0;;:::o;40227:177::-;14813:13;:11;:13::i;:::-;40320::::1;;;;;;;;;;;40312:21;;:4;:21;;::::0;40304:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40391:5;40372:10;:16;40383:4;40372:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;40227:177:::0;;:::o;38230:271::-;14813:13;:11;:13::i;:::-;38383:3:::1;38367:13;:11;:13::i;:::-;:19;;;;:::i;:::-;38357:4;38340:13;38324;:11;:13::i;:::-;:29;;;;:::i;:::-;38323:38;;;;:::i;:::-;38322:65;;38314:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;38489:4;38472:13;38456;:11;:13::i;:::-;:29;;;;:::i;:::-;38455:38;;;;:::i;:::-;38437:15;:56;;;;38230:271:::0;:::o;34168:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40412:171::-;14813:13;:11;:13::i;:::-;40526:16:::1;40508:15;;:34;;;;;;;;;;;;;;;;;;40565:10;40553:9;;:22;;;;;;;;;;;;;;;;;;40412:171:::0;;:::o;24151:151::-;24240:7;24267:11;:18;24279:5;24267:18;;;;;;;;;;;;;;;:27;24286:7;24267:27;;;;;;;;;;;;;;;;24260:34;;24151:151;;;;:::o;39921:146::-;14813:13;:11;:13::i;:::-;40051:8:::1;40013:26;:35;40040:7;40013:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39921:146:::0;;:::o;15826:201::-;14813:13;:11;:13::i;:::-;15935:1:::1;15915:22;;:8;:22;;::::0;15907:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15991:28;16010:8;15991:18;:28::i;:::-;15826:201:::0;:::o;34972:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;33424:::-;;;:::o;13478:98::-;13531:7;13558:10;13551:17;;13478:98;:::o;30807:346::-;30926:1;30909:19;;:5;:19;;;30901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31007:1;30988:21;;:7;:21;;;30980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31091:6;31061:11;:18;31073:5;31061:18;;;;;;;;;;;;;;;:27;31080:7;31061:27;;;;;;;;;;;;;;;:36;;;;31129:7;31113:32;;31122:5;31113:32;;;31138:6;31113:32;;;;;;:::i;:::-;;;;;;;;30807:346;;;:::o;15092:132::-;15167:12;:10;:12::i;:::-;15156:23;;:7;:5;:7::i;:::-;:23;;;15148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15092:132::o;8736:98::-;8794:7;8825:1;8821;:5;;;;:::i;:::-;8814:12;;8736:98;;;;:::o;31444:419::-;31545:24;31572:25;31582:5;31589:7;31572:9;:25::i;:::-;31545:52;;31632:17;31612:16;:37;31608:248;;31694:6;31674:16;:26;;31666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31778:51;31787:5;31794:7;31822:6;31803:16;:25;31778:8;:51::i;:::-;31608:248;31534:329;31444:419;;;:::o;40725:3284::-;40872:1;40862:6;:11;40858:102;;40890:37;40906:6;40914:9;40925:1;40890:15;:37::i;:::-;40942:7;;40858:102;41000:7;:5;:7::i;:::-;40990:17;;:6;:17;;;;:54;;;;;41037:7;:5;:7::i;:::-;41024:20;;:9;:20;;;;40990:54;:82;;;;;41062:10;;;;;;;;;;;41061:11;40990:82;40972:920;;;41104:9;;;;;;;;;;;41099:147;;41142:19;:27;41162:6;41142:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;41173:19;:30;41193:9;41173:30;;;;;;;;;;;;;;;;;;;;;;;;;41142:61;41134:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41099:147;41264:10;:18;41275:6;41264:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;41287:31;:42;41319:9;41287:42;;;;;;;;;;;;;;;;;;;;;;;;;41286:43;41264:65;41260:346;;;41368:12;;41358:6;:22;;41350:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41260:346;;;41439:10;:21;41450:9;41439:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;41465:31;:39;41497:6;41465:39;;;;;;;;;;;;;;;;;;;;;;;;;41464:40;41439:65;41435:171;;;41543:13;;41533:6;:23;;41525:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41435:171;41260:346;41627:26;:37;41654:9;41627:37;;;;;;;;;;;;;;;;;;;;;;;;;41622:159;;41726:15;;41702:20;41712:9;41702;:20::i;:::-;41693:6;:29;;;;:::i;:::-;:48;;41685:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;41622:159;41804:14;:22;41819:6;41804:22;;;;;;;;;;;;;;;;;;;;;;;;;41803:23;:53;;;;;41831:14;:25;41846:9;41831:25;;;;;;;;;;;;;;;;;;;;;;;;;41830:26;41803:53;41795:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40972:920;41904:28;41935:24;41953:4;41935:9;:24::i;:::-;41904:55;;41972:12;42011:19;;41987:20;:43;;41972:58;;42061:7;:35;;;;;42085:11;;;;;;;;;;;42061:35;:63;;;;;42114:10;;;;;;;;;;;42113:11;42061:63;:101;;;;;42141:10;:21;42152:9;42141:21;;;;;;;;;;;;;;;;;;;;;;;;;42061:101;:146;;;;;42180:19;:27;42200:6;42180:27;;;;;;;;;;;;;;;;;;;;;;;;;42179:28;42061:146;:194;;;;;42225:19;:30;42245:9;42225:30;;;;;;;;;;;;;;;;;;;;;;;;;42224:31;42061:194;42043:326;;;42295:4;42282:10;;:17;;;;;;;;;;;;;;;;;;42314:10;:8;:10::i;:::-;42352:5;42339:10;;:18;;;;;;;;;;;;;;;;;;42043:326;42381:12;42397:10;;;;;;;;;;;42396:11;42381:26;;42509:19;:27;42529:6;42509:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;42540:19;:30;42560:9;42540:30;;;;;;;;;;;;;;;;;;;;;;;;;42509:61;42505:109;;;42597:5;42587:15;;42505:109;42704:7;42700:1247;;;42728:12;42778:7;;42763:12;:22;42759:1037;;;42813:23;42832:3;42813:14;42824:2;42813:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;42806:30;;42891:2;42885;42878:4;:9;;;;:::i;:::-;42877:16;;;;:::i;:::-;42855:18;;:38;;;;;;;:::i;:::-;;;;;;;;42941:2;42936:1;42929:4;:8;;;;:::i;:::-;42928:15;;;;:::i;:::-;42912:12;;:31;;;;;;;:::i;:::-;;;;;;;;42759:1037;;;42969:10;:21;42980:9;42969:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;43016:1;42994:5;:19;;;;;;;;;;;;:23;;;42969:48;42965:831;;;43045:40;43081:3;43045:31;43056:5;:19;;;;;;;;;;;;43045:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;43038:47;;43158:5;:19;;;;;;;;;;;;43126:51;;43133:5;:22;;;;;;;;;;;;43126:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;43104:18;;:73;;;;;;;:::i;:::-;;;;;;;;43250:5;:19;;;;;;;;;;;;43218:51;;43225:5;:22;;;;;;;;;;;;43218:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;43196:18;;:73;;;;;;;:::i;:::-;;;;;;;;43330:5;:19;;;;;;;;;;;;43304:45;;43311:5;:16;;;;;;;;;;;;43304:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;43288:12;;:61;;;;;;;:::i;:::-;;;;;;;;42965:831;;;43411:10;:18;43422:6;43411:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;43454:1;43433:5;:18;;;;;;;;;;;;:22;;;43411:44;43407:389;;;43483:39;43518:3;43483:30;43494:5;:18;;;;;;;;;;;;43483:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;43476:46;;43594:5;:18;;;;;;;;;;;;43563:49;;43570:5;:21;;;;;;;;;;;;43563:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;43541:18;;:71;;;;;;;:::i;:::-;;;;;;;;43684:5;:18;;;;;;;;;;;;43653:49;;43660:5;:21;;;;;;;;;;;;43653:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;43631:18;;:71;;;;;;;:::i;:::-;;;;;;;;43762:5;:18;;;;;;;;;;;;43737:43;;43744:5;:15;;;;;;;;;;;;43737:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;43721:12;;:59;;;;;;;:::i;:::-;;;;;;;;43407:389;42965:831;42759:1037;43823:1;43816:4;:8;43812:93;;;43845:44;43861:6;43877:4;43884;43845:15;:44::i;:::-;43812:93;43931:4;43921:14;;;;;:::i;:::-;;;42713:1234;42700:1247;43959:42;43975:6;43983:9;43994:6;43959:15;:42::i;:::-;40847:3162;;;40725:3284;;;;:::o;16187:191::-;16261:16;16280:6;;;;;;;;;;;16261:25;;16306:8;16297:6;;:17;;;;;;;;;;;;;;;;;;16361:8;16330:40;;16351:8;16330:40;;;;;;;;;;;;16250:128;16187:191;:::o;27720:806::-;27833:1;27817:18;;:4;:18;;;27809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27910:1;27896:16;;:2;:16;;;27888:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27965:38;27986:4;27992:2;27996:6;27965:20;:38::i;:::-;28016:19;28038:9;:15;28048:4;28038:15;;;;;;;;;;;;;;;;28016:37;;28087:6;28072:11;:21;;28064:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28204:6;28190:11;:20;28172:9;:15;28182:4;28172:15;;;;;;;;;;;;;;;:38;;;;28407:6;28390:9;:13;28400:2;28390:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28457:2;28442:26;;28451:4;28442:26;;;28461:6;28442:26;;;;;;:::i;:::-;;;;;;;;28481:37;28501:4;28507:2;28511:6;28481:19;:37::i;:::-;27798:728;27720:806;;;:::o;45018:1610::-;45057:28;45088:24;45106:4;45088:9;:24::i;:::-;45057:55;;45123:14;45182:12;;45161:18;;45140;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45123:71;;45235:1;45211:20;:25;:40;;;;45250:1;45240:6;:11;45211:40;45207:79;;;45268:7;;;;45207:79;45325:19;;45302:20;:42;45298:117;;;45384:19;;45361:42;;45298:117;45476:23;45555:1;45546:6;45525:18;;45502:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;45476:80;;45567:26;45596:41;45621:15;45596:20;:24;;:41;;;;:::i;:::-;45567:70;;45650:25;45678:21;45650:49;;45712:36;45729:18;45712:16;:36::i;:::-;45761:18;45782:44;45808:17;45782:21;:25;;:44;;;;:::i;:::-;45761:65;;45839:23;45865:46;45904:6;45865:34;45880:18;;45865:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;45839:72;;45922:17;45942:40;45975:6;45942:28;45957:12;;45942:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;45922:60;;45993:23;46051:9;46033:15;:27;;;;:::i;:::-;46019:10;:42;;;;:::i;:::-;45993:68;;46095:1;46074:18;:22;;;;46128:1;46107:18;:22;;;;46155:1;46140:12;:16;;;;46191:1;46173:15;:19;:42;;;;;46214:1;46196:15;:19;46173:42;46169:182;;;46232:46;46245:15;46262;46232:12;:46::i;:::-;46298:51;46313:18;46333:15;46298:51;;;;;;;:::i;:::-;;;;;;;;46169:182;46419:1;46374:42;46400:15;46374:21;:25;;:42;;;;:::i;:::-;:46;46371:138;;;46444:9;;;;;;;;;;;46436:27;;:71;46464:42;46490:15;46464:21;:25;;:42;;;;:::i;:::-;46436:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46371:138;46546:1;46522:21;:25;46519:102;;;46571:15;;;;;;;;;;;46563:33;;:56;46597:21;46563:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46519:102;45046:1582;;;;;;;;;45018:1610;:::o;9474:98::-;9532:7;9563:1;9559;:5;;;;:::i;:::-;9552:12;;9474:98;;;;:::o;9873:::-;9931:7;9962:1;9958;:5;;;;:::i;:::-;9951:12;;9873:98;;;;:::o;32463:91::-;;;;:::o;33158:90::-;;;;:::o;9117:98::-;9175:7;9206:1;9202;:5;;;;:::i;:::-;9195:12;;9117:98;;;;:::o;44017:550::-;44139:21;44177:1;44163:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44139:40;;44208:4;44190;44195:1;44190:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44234:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44224:4;44229:1;44224:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44260:49;44277:4;44292:6;44301:7;44260:8;:49::i;:::-;44348:6;:57;;;44420:7;44442:1;44486:4;44513;44533:15;44348:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44068:499;44017:550;:::o;44575:435::-;44719:49;44736:4;44751:6;44760:7;44719:8;:49::i;:::-;44811:6;:22;;;44841:9;44874:4;44894:7;44916:1;44932;44956:4;44976:15;44811:191;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44575:435;;:::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;1553:117;1662:1;1659;1652: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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:116::-;4683:21;4698:5;4683:21;:::i;:::-;4676:5;4673:32;4663:60;;4719:1;4716;4709:12;4663:60;4613:116;:::o;4735:133::-;4778:5;4816:6;4803:20;4794:29;;4832:30;4856:5;4832:30;:::i;:::-;4735:133;;;;:::o;4874:323::-;4930:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:50;5172:7;5163:6;5152:9;5148:22;5130:50;:::i;:::-;5120:60;;5076:114;4874:323;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:118::-;6329:22;6345:5;6329:22;:::i;:::-;6322:5;6319:33;6309:61;;6366:1;6363;6356:12;6309:61;6258:118;:::o;6382:135::-;6426:5;6464:6;6451:20;6442:29;;6480:31;6505:5;6480:31;:::i;:::-;6382:135;;;;:::o;6523:1033::-;6615:6;6623;6631;6639;6647;6655;6704:3;6692:9;6683:7;6679:23;6675:33;6672:120;;;6711:79;;:::i;:::-;6672:120;6831:1;6856:51;6899:7;6890:6;6879:9;6875:22;6856:51;:::i;:::-;6846:61;;6802:115;6956:2;6982:51;7025:7;7016:6;7005:9;7001:22;6982:51;:::i;:::-;6972:61;;6927:116;7082:2;7108:51;7151:7;7142:6;7131:9;7127:22;7108:51;:::i;:::-;7098:61;;7053:116;7208:2;7234:51;7277:7;7268:6;7257:9;7253:22;7234:51;:::i;:::-;7224:61;;7179:116;7334:3;7361:51;7404:7;7395:6;7384:9;7380:22;7361:51;:::i;:::-;7351:61;;7305:117;7461:3;7488:51;7531:7;7522:6;7511:9;7507:22;7488:51;:::i;:::-;7478:61;;7432:117;6523:1033;;;;;;;;:::o;7562:468::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7937:2;7963:50;8005:7;7996:6;7985:9;7981:22;7963:50;:::i;:::-;7953:60;;7908:115;7562:468;;;;;:::o;8036:118::-;8123:24;8141:5;8123:24;:::i;:::-;8118:3;8111:37;8036:118;;:::o;8160:222::-;8253:4;8291:2;8280:9;8276:18;8268:26;;8304:71;8372:1;8361:9;8357:17;8348:6;8304:71;:::i;:::-;8160:222;;;;:::o;8388:329::-;8447:6;8496:2;8484:9;8475:7;8471:23;8467:32;8464:119;;;8502:79;;:::i;:::-;8464:119;8622:1;8647:53;8692:7;8683:6;8672:9;8668:22;8647:53;:::i;:::-;8637:63;;8593:117;8388:329;;;;:::o;8723:117::-;8832:1;8829;8822:12;8846:117;8955:1;8952;8945:12;8969:117;9078:1;9075;9068:12;9109:568;9182:8;9192:6;9242:3;9235:4;9227:6;9223:17;9219:27;9209:122;;9250:79;;:::i;:::-;9209:122;9363:6;9350:20;9340:30;;9393:18;9385:6;9382:30;9379:117;;;9415:79;;:::i;:::-;9379:117;9529:4;9521:6;9517:17;9505:29;;9583:3;9575:4;9567:6;9563:17;9553:8;9549:32;9546:41;9543:128;;;9590:79;;:::i;:::-;9543:128;9109:568;;;;;:::o;9700:::-;9773:8;9783:6;9833:3;9826:4;9818:6;9814:17;9810:27;9800:122;;9841:79;;:::i;:::-;9800:122;9954:6;9941:20;9931:30;;9984:18;9976:6;9973:30;9970:117;;;10006:79;;:::i;:::-;9970:117;10120:4;10112:6;10108:17;10096:29;;10174:3;10166:4;10158:6;10154:17;10144:8;10140:32;10137:41;10134:128;;;10181:79;;:::i;:::-;10134:128;9700:568;;;;;:::o;10274:934::-;10396:6;10404;10412;10420;10469:2;10457:9;10448:7;10444:23;10440:32;10437:119;;;10475:79;;:::i;:::-;10437:119;10623:1;10612:9;10608:17;10595:31;10653:18;10645:6;10642:30;10639:117;;;10675:79;;:::i;:::-;10639:117;10788:80;10860:7;10851:6;10840:9;10836:22;10788:80;:::i;:::-;10770:98;;;;10566:312;10945:2;10934:9;10930:18;10917:32;10976:18;10968:6;10965:30;10962:117;;;10998:79;;:::i;:::-;10962:117;11111:80;11183:7;11174:6;11163:9;11159:22;11111:80;:::i;:::-;11093:98;;;;10888:313;10274:934;;;;;;;:::o;11214:933::-;11471:4;11509:3;11498:9;11494:19;11486:27;;11523:67;11587:1;11576:9;11572:17;11563:6;11523:67;:::i;:::-;11600:68;11664:2;11653:9;11649:18;11640:6;11600:68;:::i;:::-;11678;11742:2;11731:9;11727:18;11718:6;11678:68;:::i;:::-;11756;11820:2;11809:9;11805:18;11796:6;11756:68;:::i;:::-;11834:69;11898:3;11887:9;11883:19;11874:6;11834:69;:::i;:::-;11913;11977:3;11966:9;11962:19;11953:6;11913:69;:::i;:::-;11992;12056:3;12045:9;12041:19;12032:6;11992:69;:::i;:::-;12071;12135:3;12124:9;12120:19;12111:6;12071:69;:::i;:::-;11214:933;;;;;;;;;;;:::o;12153:474::-;12221:6;12229;12278:2;12266:9;12257:7;12253:23;12249:32;12246:119;;;12284:79;;:::i;:::-;12246:119;12404:1;12429:53;12474:7;12465:6;12454:9;12450:22;12429:53;:::i;:::-;12419:63;;12375:117;12531:2;12557:53;12602:7;12593:6;12582:9;12578:22;12557:53;:::i;:::-;12547:63;;12502:118;12153:474;;;;;:::o;12633:60::-;12661:3;12682:5;12675:12;;12633:60;;;:::o;12699:142::-;12749:9;12782:53;12800:34;12809:24;12827:5;12809:24;:::i;:::-;12800:34;:::i;:::-;12782:53;:::i;:::-;12769:66;;12699:142;;;:::o;12847:126::-;12897:9;12930:37;12961:5;12930:37;:::i;:::-;12917:50;;12847:126;;;:::o;12979:152::-;13055:9;13088:37;13119:5;13088:37;:::i;:::-;13075:50;;12979:152;;;:::o;13137:183::-;13250:63;13307:5;13250:63;:::i;:::-;13245:3;13238:76;13137:183;;:::o;13326:274::-;13445:4;13483:2;13472:9;13468:18;13460:26;;13496:97;13590:1;13579:9;13575:17;13566:6;13496:97;:::i;:::-;13326:274;;;;:::o;13606:180::-;13654:77;13651:1;13644:88;13751:4;13748:1;13741:15;13775:4;13772:1;13765:15;13792:320;13836:6;13873:1;13867:4;13863:12;13853:22;;13920:1;13914:4;13910:12;13941:18;13931:81;;13997:4;13989:6;13985:17;13975:27;;13931:81;14059:2;14051:6;14048:14;14028:18;14025:38;14022:84;;14078:18;;:::i;:::-;14022:84;13843:269;13792:320;;;:::o;14118:180::-;14166:77;14163:1;14156:88;14263:4;14260:1;14253:15;14287:4;14284:1;14277:15;14304:180;14352:77;14349:1;14342:88;14449:4;14446:1;14439:15;14473:4;14470:1;14463:15;14490:185;14530:1;14547:20;14565:1;14547:20;:::i;:::-;14542:25;;14581:20;14599:1;14581:20;:::i;:::-;14576:25;;14620:1;14610:35;;14625:18;;:::i;:::-;14610:35;14667:1;14664;14660:9;14655:14;;14490:185;;;;:::o;14681:410::-;14721:7;14744:20;14762:1;14744:20;:::i;:::-;14739:25;;14778:20;14796:1;14778:20;:::i;:::-;14773:25;;14833:1;14830;14826:9;14855:30;14873:11;14855:30;:::i;:::-;14844:41;;15034:1;15025:7;15021:15;15018:1;15015:22;14995:1;14988:9;14968:83;14945:139;;15064:18;;:::i;:::-;14945:139;14729:362;14681:410;;;;:::o;15097:222::-;15237:34;15233:1;15225:6;15221:14;15214:58;15306:5;15301:2;15293:6;15289:15;15282:30;15097:222;:::o;15325:366::-;15467:3;15488:67;15552:2;15547:3;15488:67;:::i;:::-;15481:74;;15564:93;15653:3;15564:93;:::i;:::-;15682:2;15677:3;15673:12;15666:19;;15325:366;;;:::o;15697:419::-;15863:4;15901:2;15890:9;15886:18;15878:26;;15950:9;15944:4;15940:20;15936:1;15925:9;15921:17;15914:47;15978:131;16104:4;15978:131;:::i;:::-;15970:139;;15697:419;;;:::o;16122:223::-;16262:34;16258:1;16250:6;16246:14;16239:58;16331:6;16326:2;16318:6;16314:15;16307:31;16122:223;:::o;16351:366::-;16493:3;16514:67;16578:2;16573:3;16514:67;:::i;:::-;16507:74;;16590:93;16679:3;16590:93;:::i;:::-;16708:2;16703:3;16699:12;16692:19;;16351:366;;;:::o;16723:419::-;16889:4;16927:2;16916:9;16912:18;16904:26;;16976:9;16970:4;16966:20;16962:1;16951:9;16947:17;16940:47;17004:131;17130:4;17004:131;:::i;:::-;16996:139;;16723:419;;;:::o;17148:188::-;17186:3;17205:18;17221:1;17205:18;:::i;:::-;17200:23;;17237:18;17253:1;17237:18;:::i;:::-;17232:23;;17278:1;17275;17271:9;17264:16;;17301:4;17296:3;17293:13;17290:39;;;17309:18;;:::i;:::-;17290:39;17148:188;;;;:::o;17342:179::-;17482:31;17478:1;17470:6;17466:14;17459:55;17342:179;:::o;17527:366::-;17669:3;17690:67;17754:2;17749:3;17690:67;:::i;:::-;17683:74;;17766:93;17855:3;17766:93;:::i;:::-;17884:2;17879:3;17875:12;17868:19;;17527:366;;;:::o;17899:419::-;18065:4;18103:2;18092:9;18088:18;18080:26;;18152:9;18146:4;18142:20;18138:1;18127:9;18123:17;18116:47;18180:131;18306:4;18180:131;:::i;:::-;18172:139;;17899:419;;;:::o;18324:191::-;18364:3;18383:20;18401:1;18383:20;:::i;:::-;18378:25;;18417:20;18435:1;18417:20;:::i;:::-;18412:25;;18460:1;18457;18453:9;18446:16;;18481:3;18478:1;18475:10;18472:36;;;18488:18;;:::i;:::-;18472:36;18324:191;;;;:::o;18521:227::-;18661:34;18657:1;18649:6;18645:14;18638:58;18730:10;18725:2;18717:6;18713:15;18706:35;18521:227;:::o;18754:366::-;18896:3;18917:67;18981:2;18976:3;18917:67;:::i;:::-;18910:74;;18993:93;19082:3;18993:93;:::i;:::-;19111:2;19106:3;19102:12;19095:19;;18754:366;;;:::o;19126:419::-;19292:4;19330:2;19319:9;19315:18;19307:26;;19379:9;19373:4;19369:20;19365:1;19354:9;19350:17;19343:47;19407:131;19533:4;19407:131;:::i;:::-;19399:139;;19126:419;;;:::o;19551:180::-;19599:77;19596:1;19589:88;19696:4;19693:1;19686:15;19720:4;19717:1;19710:15;19737:233;19776:3;19799:24;19817:5;19799:24;:::i;:::-;19790:33;;19845:66;19838:5;19835:77;19832:103;;19915:18;;:::i;:::-;19832:103;19962:1;19955:5;19951:13;19944:20;;19737:233;;;:::o;19976:179::-;20116:31;20112:1;20104:6;20100:14;20093:55;19976:179;:::o;20161:366::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20161:366;;;:::o;20533:419::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20786:9;20780:4;20776:20;20772:1;20761:9;20757:17;20750:47;20814:131;20940:4;20814:131;:::i;:::-;20806:139;;20533:419;;;:::o;20958:332::-;21079:4;21117:2;21106:9;21102:18;21094:26;;21130:71;21198:1;21187:9;21183:17;21174:6;21130:71;:::i;:::-;21211:72;21279:2;21268:9;21264:18;21255:6;21211:72;:::i;:::-;20958:332;;;;;:::o;21296:137::-;21350:5;21381:6;21375:13;21366:22;;21397:30;21421:5;21397:30;:::i;:::-;21296:137;;;;:::o;21439:345::-;21506:6;21555:2;21543:9;21534:7;21530:23;21526:32;21523:119;;;21561:79;;:::i;:::-;21523:119;21681:1;21706:61;21759:7;21750:6;21739:9;21735:22;21706:61;:::i;:::-;21696:71;;21652:125;21439:345;;;;:::o;21790:224::-;21930:34;21926:1;21918:6;21914:14;21907:58;21999:7;21994:2;21986:6;21982:15;21975:32;21790:224;:::o;22020:366::-;22162:3;22183:67;22247:2;22242:3;22183:67;:::i;:::-;22176:74;;22259:93;22348:3;22259:93;:::i;:::-;22377:2;22372:3;22368:12;22361:19;;22020:366;;;:::o;22392:419::-;22558:4;22596:2;22585:9;22581:18;22573:26;;22645:9;22639:4;22635:20;22631:1;22620:9;22616:17;22609:47;22673:131;22799:4;22673:131;:::i;:::-;22665:139;;22392:419;;;:::o;22817:173::-;22957:25;22953:1;22945:6;22941:14;22934:49;22817:173;:::o;22996:366::-;23138:3;23159:67;23223:2;23218:3;23159:67;:::i;:::-;23152:74;;23235:93;23324:3;23235:93;:::i;:::-;23353:2;23348:3;23344:12;23337:19;;22996:366;;;:::o;23368:419::-;23534:4;23572:2;23561:9;23557:18;23549:26;;23621:9;23615:4;23611:20;23607:1;23596:9;23592:17;23585:47;23649:131;23775:4;23649:131;:::i;:::-;23641:139;;23368:419;;;:::o;23793:221::-;23933:34;23929:1;23921:6;23917:14;23910:58;24002:4;23997:2;23989:6;23985:15;23978:29;23793:221;:::o;24020:366::-;24162:3;24183:67;24247:2;24242:3;24183:67;:::i;:::-;24176:74;;24259:93;24348:3;24259:93;:::i;:::-;24377:2;24372:3;24368:12;24361:19;;24020:366;;;:::o;24392:419::-;24558:4;24596:2;24585:9;24581:18;24573:26;;24645:9;24639:4;24635:20;24631:1;24620:9;24616:17;24609:47;24673:131;24799:4;24673:131;:::i;:::-;24665:139;;24392:419;;;:::o;24817:225::-;24957:34;24953:1;24945:6;24941:14;24934:58;25026:8;25021:2;25013:6;25009:15;25002:33;24817:225;:::o;25048:366::-;25190:3;25211:67;25275:2;25270:3;25211:67;:::i;:::-;25204:74;;25287:93;25376:3;25287:93;:::i;:::-;25405:2;25400:3;25396:12;25389:19;;25048:366;;;:::o;25420:419::-;25586:4;25624:2;25613:9;25609:18;25601:26;;25673:9;25667:4;25663:20;25659:1;25648:9;25644:17;25637:47;25701:131;25827:4;25701:131;:::i;:::-;25693:139;;25420:419;;;:::o;25845:223::-;25985:34;25981:1;25973:6;25969:14;25962:58;26054:6;26049:2;26041:6;26037:15;26030:31;25845:223;:::o;26074:366::-;26216:3;26237:67;26301:2;26296:3;26237:67;:::i;:::-;26230:74;;26313:93;26402:3;26313:93;:::i;:::-;26431:2;26426:3;26422:12;26415:19;;26074:366;;;:::o;26446:419::-;26612:4;26650:2;26639:9;26635:18;26627:26;;26699:9;26693:4;26689:20;26685:1;26674:9;26670:17;26663:47;26727:131;26853:4;26727:131;:::i;:::-;26719:139;;26446:419;;;:::o;26871:221::-;27011:34;27007:1;26999:6;26995:14;26988:58;27080:4;27075:2;27067:6;27063:15;27056:29;26871:221;:::o;27098:366::-;27240:3;27261:67;27325:2;27320:3;27261:67;:::i;:::-;27254:74;;27337:93;27426:3;27337:93;:::i;:::-;27455:2;27450:3;27446:12;27439:19;;27098:366;;;:::o;27470:419::-;27636:4;27674:2;27663:9;27659:18;27651:26;;27723:9;27717:4;27713:20;27709:1;27698:9;27694:17;27687:47;27751:131;27877:4;27751:131;:::i;:::-;27743:139;;27470:419;;;:::o;27895:182::-;28035:34;28031:1;28023:6;28019:14;28012:58;27895:182;:::o;28083:366::-;28225:3;28246:67;28310:2;28305:3;28246:67;:::i;:::-;28239:74;;28322:93;28411:3;28322:93;:::i;:::-;28440:2;28435:3;28431:12;28424:19;;28083:366;;;:::o;28455:419::-;28621:4;28659:2;28648:9;28644:18;28636:26;;28708:9;28702:4;28698:20;28694:1;28683:9;28679:17;28672:47;28736:131;28862:4;28736:131;:::i;:::-;28728:139;;28455:419;;;:::o;28880:179::-;29020:31;29016:1;29008:6;29004:14;28997:55;28880:179;:::o;29065:366::-;29207:3;29228:67;29292:2;29287:3;29228:67;:::i;:::-;29221:74;;29304:93;29393:3;29304:93;:::i;:::-;29422:2;29417:3;29413:12;29406:19;;29065:366;;;:::o;29437:419::-;29603:4;29641:2;29630:9;29626:18;29618:26;;29690:9;29684:4;29680:20;29676:1;29665:9;29661:17;29654:47;29718:131;29844:4;29718:131;:::i;:::-;29710:139;;29437:419;;;:::o;29862:172::-;30002:24;29998:1;29990:6;29986:14;29979:48;29862:172;:::o;30040:366::-;30182:3;30203:67;30267:2;30262:3;30203:67;:::i;:::-;30196:74;;30279:93;30368:3;30279:93;:::i;:::-;30397:2;30392:3;30388:12;30381:19;;30040:366;;;:::o;30412:419::-;30578:4;30616:2;30605:9;30601:18;30593:26;;30665:9;30659:4;30655:20;30651:1;30640:9;30636:17;30629:47;30693:131;30819:4;30693:131;:::i;:::-;30685:139;;30412:419;;;:::o;30837:178::-;30977:30;30973:1;30965:6;30961:14;30954:54;30837:178;:::o;31021:366::-;31163:3;31184:67;31248:2;31243:3;31184:67;:::i;:::-;31177:74;;31260:93;31349:3;31260:93;:::i;:::-;31378:2;31373:3;31369:12;31362:19;;31021:366;;;:::o;31393:419::-;31559:4;31597:2;31586:9;31582:18;31574:26;;31646:9;31640:4;31636:20;31632:1;31621:9;31617:17;31610:47;31674:131;31800:4;31674:131;:::i;:::-;31666:139;;31393:419;;;:::o;31818:179::-;31958:31;31954:1;31946:6;31942:14;31935:55;31818:179;:::o;32003:366::-;32145:3;32166:67;32230:2;32225:3;32166:67;:::i;:::-;32159:74;;32242:93;32331:3;32242:93;:::i;:::-;32360:2;32355:3;32351:12;32344:19;;32003:366;;;:::o;32375:419::-;32541:4;32579:2;32568:9;32564:18;32556:26;;32628:9;32622:4;32618:20;32614:1;32603:9;32599:17;32592:47;32656:131;32782:4;32656:131;:::i;:::-;32648:139;;32375:419;;;:::o;32800:169::-;32940:21;32936:1;32928:6;32924:14;32917:45;32800:169;:::o;32975:366::-;33117:3;33138:67;33202:2;33197:3;33138:67;:::i;:::-;33131:74;;33214:93;33303:3;33214:93;:::i;:::-;33332:2;33327:3;33323:12;33316:19;;32975:366;;;:::o;33347:419::-;33513:4;33551:2;33540:9;33536:18;33528:26;;33600:9;33594:4;33590:20;33586:1;33575:9;33571:17;33564:47;33628:131;33754:4;33628:131;:::i;:::-;33620:139;;33347:419;;;:::o;33772:169::-;33912:21;33908:1;33900:6;33896:14;33889:45;33772:169;:::o;33947:366::-;34089:3;34110:67;34174:2;34169:3;34110:67;:::i;:::-;34103:74;;34186:93;34275:3;34186:93;:::i;:::-;34304:2;34299:3;34295:12;34288:19;;33947:366;;;:::o;34319:419::-;34485:4;34523:2;34512:9;34508:18;34500:26;;34572:9;34566:4;34562:20;34558:1;34547:9;34543:17;34536:47;34600:131;34726:4;34600:131;:::i;:::-;34592:139;;34319:419;;;:::o;34744:194::-;34784:4;34804:20;34822:1;34804:20;:::i;:::-;34799:25;;34838:20;34856:1;34838:20;:::i;:::-;34833:25;;34882:1;34879;34875:9;34867:17;;34906:1;34900:4;34897:11;34894:37;;;34911:18;;:::i;:::-;34894:37;34744:194;;;;:::o;34944:224::-;35084:34;35080:1;35072:6;35068:14;35061:58;35153:7;35148:2;35140:6;35136:15;35129:32;34944:224;:::o;35174:366::-;35316:3;35337:67;35401:2;35396:3;35337:67;:::i;:::-;35330:74;;35413:93;35502:3;35413:93;:::i;:::-;35531:2;35526:3;35522:12;35515:19;;35174:366;;;:::o;35546:419::-;35712:4;35750:2;35739:9;35735:18;35727:26;;35799:9;35793:4;35789:20;35785:1;35774:9;35770:17;35763:47;35827:131;35953:4;35827:131;:::i;:::-;35819:139;;35546:419;;;:::o;35971:222::-;36111:34;36107:1;36099:6;36095:14;36088:58;36180:5;36175:2;36167:6;36163:15;36156:30;35971:222;:::o;36199:366::-;36341:3;36362:67;36426:2;36421:3;36362:67;:::i;:::-;36355:74;;36438:93;36527:3;36438:93;:::i;:::-;36556:2;36551:3;36547:12;36540:19;;36199:366;;;:::o;36571:419::-;36737:4;36775:2;36764:9;36760:18;36752:26;;36824:9;36818:4;36814:20;36810:1;36799:9;36795:17;36788:47;36852:131;36978:4;36852:131;:::i;:::-;36844:139;;36571:419;;;:::o;36996:225::-;37136:34;37132:1;37124:6;37120:14;37113:58;37205:8;37200:2;37192:6;37188:15;37181:33;36996:225;:::o;37227:366::-;37369:3;37390:67;37454:2;37449:3;37390:67;:::i;:::-;37383:74;;37466:93;37555:3;37466:93;:::i;:::-;37584:2;37579:3;37575:12;37568:19;;37227:366;;;:::o;37599:419::-;37765:4;37803:2;37792:9;37788:18;37780:26;;37852:9;37846:4;37842:20;37838:1;37827:9;37823:17;37816:47;37880:131;38006:4;37880:131;:::i;:::-;37872:139;;37599:419;;;:::o;38024:332::-;38145:4;38183:2;38172:9;38168:18;38160:26;;38196:71;38264:1;38253:9;38249:17;38240:6;38196:71;:::i;:::-;38277:72;38345:2;38334:9;38330:18;38321:6;38277:72;:::i;:::-;38024:332;;;;;:::o;38362:180::-;38410:77;38407:1;38400:88;38507:4;38504:1;38497:15;38531:4;38528:1;38521:15;38548:143;38605:5;38636:6;38630:13;38621:22;;38652:33;38679:5;38652:33;:::i;:::-;38548:143;;;;:::o;38697:351::-;38767:6;38816:2;38804:9;38795:7;38791:23;38787:32;38784:119;;;38822:79;;:::i;:::-;38784:119;38942:1;38967:64;39023:7;39014:6;39003:9;38999:22;38967:64;:::i;:::-;38957:74;;38913:128;38697:351;;;;:::o;39054:85::-;39099:7;39128:5;39117:16;;39054:85;;;:::o;39145:158::-;39203:9;39236:61;39254:42;39263:32;39289:5;39263:32;:::i;:::-;39254:42;:::i;:::-;39236:61;:::i;:::-;39223:74;;39145:158;;;:::o;39309:147::-;39404:45;39443:5;39404:45;:::i;:::-;39399:3;39392:58;39309:147;;:::o;39462:114::-;39529:6;39563:5;39557:12;39547:22;;39462:114;;;:::o;39582:184::-;39681:11;39715:6;39710:3;39703:19;39755:4;39750:3;39746:14;39731:29;;39582:184;;;;:::o;39772:132::-;39839:4;39862:3;39854:11;;39892:4;39887:3;39883:14;39875:22;;39772:132;;;:::o;39910:108::-;39987:24;40005:5;39987:24;:::i;:::-;39982:3;39975:37;39910:108;;:::o;40024:179::-;40093:10;40114:46;40156:3;40148:6;40114:46;:::i;:::-;40192:4;40187:3;40183:14;40169:28;;40024:179;;;;:::o;40209:113::-;40279:4;40311;40306:3;40302:14;40294:22;;40209:113;;;:::o;40358:732::-;40477:3;40506:54;40554:5;40506:54;:::i;:::-;40576:86;40655:6;40650:3;40576:86;:::i;:::-;40569:93;;40686:56;40736:5;40686:56;:::i;:::-;40765:7;40796:1;40781:284;40806:6;40803:1;40800:13;40781:284;;;40882:6;40876:13;40909:63;40968:3;40953:13;40909:63;:::i;:::-;40902:70;;40995:60;41048:6;40995:60;:::i;:::-;40985:70;;40841:224;40828:1;40825;40821:9;40816:14;;40781:284;;;40785:14;41081:3;41074:10;;40482:608;;;40358:732;;;;:::o;41096:831::-;41359:4;41397:3;41386:9;41382:19;41374:27;;41411:71;41479:1;41468:9;41464:17;41455:6;41411:71;:::i;:::-;41492:80;41568:2;41557:9;41553:18;41544:6;41492:80;:::i;:::-;41619:9;41613:4;41609:20;41604:2;41593:9;41589:18;41582:48;41647:108;41750:4;41741:6;41647:108;:::i;:::-;41639:116;;41765:72;41833:2;41822:9;41818:18;41809:6;41765:72;:::i;:::-;41847:73;41915:3;41904:9;41900:19;41891:6;41847:73;:::i;:::-;41096:831;;;;;;;;:::o;41933:807::-;42182:4;42220:3;42209:9;42205:19;42197:27;;42234:71;42302:1;42291:9;42287:17;42278:6;42234:71;:::i;:::-;42315:72;42383:2;42372:9;42368:18;42359:6;42315:72;:::i;:::-;42397:80;42473:2;42462:9;42458:18;42449:6;42397:80;:::i;:::-;42487;42563:2;42552:9;42548:18;42539:6;42487:80;:::i;:::-;42577:73;42645:3;42634:9;42630:19;42621:6;42577:73;:::i;:::-;42660;42728:3;42717:9;42713:19;42704:6;42660:73;:::i;:::-;41933:807;;;;;;;;;:::o;42746:143::-;42803:5;42834:6;42828:13;42819:22;;42850:33;42877:5;42850:33;:::i;:::-;42746:143;;;;:::o;42895:663::-;42983:6;42991;42999;43048:2;43036:9;43027:7;43023:23;43019:32;43016:119;;;43054:79;;:::i;:::-;43016:119;43174:1;43199:64;43255:7;43246:6;43235:9;43231:22;43199:64;:::i;:::-;43189:74;;43145:128;43312:2;43338:64;43394:7;43385:6;43374:9;43370:22;43338:64;:::i;:::-;43328:74;;43283:129;43451:2;43477:64;43533:7;43524:6;43513:9;43509:22;43477:64;:::i;:::-;43467:74;;43422:129;42895:663;;;;;:::o
Swarm Source
ipfs://59f60563c679f79a7af7b02412219b4ff725ca94b6bd1be8d91b9fdcb10a97e2
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.