Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
46,000,000 HOUR
Holders
64
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.133302238297998047 HOURValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ABOLISH
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-11 */ // SPDX-License-Identifier: MIT // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity 0.8.17; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity 0.8.17; 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: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity 0.8.17; 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.8.17; 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: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity 0.8.17; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity 0.8.17; /** * @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 v4.4.0 (access/Ownable.sol) pragma solidity 0.8.17; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity 0.8.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.0 (token/ERC20/ERC20.sol) pragma solidity 0.8.17; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; if (amount > 0) { emit Transfer(sender, recipient, amount);} _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: contracts/HOUR.sol pragma solidity 0.8.17; contract ABOLISH is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; struct BuyFee { uint16 marketingFee; } struct SellFee { uint16 marketingFee; } bool private swapping; BuyFee public buyFee; SellFee public sellFee; uint256 public swapThreshold = 0.00005 ether; //threshold in eth (when collected tokens reach this worth or more it's swapped) uint256 private maxSupply = 46000000 * 1e18; // 46 million tokens uint256 public maxTxAmount = maxSupply * 15 /1000; // 1.5% of the supply uint256 public maxWalletAmount = maxSupply * 2 / 100; // 2% of the supply (antiwhale) uint16 private totalBuyFee; uint16 private totalSellFee; bool public swapEnabled; bool private isTradingEnabled; address payable marketingWallet = payable(address(0x39c737Bc1fcE9d0Becdb9f4f38301BF4523f12B7)); // marketingWallet to receive ETH mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromLimit; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); modifier lockTheSwap() { swapping = true; _; swapping = false; } constructor() ERC20("Abolish Daylight Savings", "HOUR") { buyFee.marketingFee = 5; totalBuyFee = 5; sellFee.marketingFee = 15; totalSellFee = 15; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D// Uniswap V2 Router ); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(marketingWallet, true); swapEnabled = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), maxSupply); // 46 Million Tokens } receive() external payable {} function updateRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "ABOLISH: The router already has that address"); uniswapV2Router = IUniswapV2Router02(newAddress); address get_pair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this), uniswapV2Router.WETH()); if (get_pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); } else { uniswapV2Pair = get_pair; } } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded,"ABOLISH: Account is already the value of excluded"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } // claim other ERC20 token from token contract function claimStuckTokens(address _token) external onlyOwner { if (_token == address(this)){ transfer(owner(), balanceOf(address(this))); } else { IERC20 erc20token = IERC20(_token); uint256 balance = erc20token.balanceOf(address(this)); erc20token.transfer(owner(), balance); } } // claim stucked Ether (if any) function claimStuckEther() external onlyOwner { (bool sent,) = marketingWallet.call{value: address(this).balance}(""); require (sent, "eth transfer failed"); } // exclude from maxTx limit function excludefromLimit(address account, bool excluded) external onlyOwner { _isExcludedFromLimit[account] = excluded; } function enableTrading() external onlyOwner { isTradingEnabled = true; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "ABOLISH: The uniswap pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "ABOLISH: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function setBuyFees( uint16 _market ) external onlyOwner { buyFee.marketingFee = _market; totalBuyFee = _market ; require(totalBuyFee <= 10,"MaX buy fees limit is 10%"); } function setSellFees( uint16 _market ) external onlyOwner { sellFee.marketingFee = _market; totalSellFee = _market; require(totalSellFee <= 15,"MaX buy fees limit is 15%"); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } // function to change marketing wallet function updateMarketWallet(address mWallet) external onlyOwner { require (mWallet != address(0), "marketing wallet can not be a zero address"); marketingWallet = payable(mWallet); } // Function to set Max Wallet limit ( How many tokens a wallet can hold) function setMaxWallet(uint256 amount) external onlyOwner { require(amount >= totalSupply() / 1e20, "Max Wallet amount should be 1% or more of the supply"); maxWalletAmount = amount * 1e18; } // function to set Max Tx limit per transaction function setMaxTxAmount(uint256 amount) external onlyOwner { require(amount >= totalSupply() / 1e21, "Max Tx amount should be 0.1% of more of the supply"); maxTxAmount = amount * 1e18; } // function to set threshold for eth conversion function setSwapThreshold(uint256 amountInWei) external onlyOwner { require (amountInWei > 1e9, "threshold should be greator than 1 gwei"); swapThreshold = amountInWei; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "HOUR: transfer from the zero address"); require(to != address(0), "HOUR: transfer to the zero address"); require( isTradingEnabled || _isExcludedFromFees[from], "Trading not enabled yet" ); if (amount == 0) { super._transfer(from, to, 0); return; } address[] memory sellPath = new address[](2); sellPath[0] = address(this); sellPath[1] = uniswapV2Router.WETH(); uint256 ethValue; if (balanceOf(address(this)) > 0){ ethValue = uniswapV2Router.getAmountsOut(balanceOf(address(this)), sellPath)[1]; } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = ethValue >= swapThreshold; if ( swapEnabled && !swapping && from != uniswapV2Pair && overMinimumTokenBalance ) { uint256 swapTokens = contractTokenBalance; swapAndSendToMarketing(swapTokens); } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (takeFee) { uint256 fees; if (automatedMarketMakerPairs[to]) { fees = totalSellFee; } else if (automatedMarketMakerPairs[from]) { fees = totalBuyFee; } if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { if (automatedMarketMakerPairs[to]) { require(amount <= maxTxAmount, "Sell exceeds Max Tx limit"); } else if (automatedMarketMakerPairs[from]) { require(amount <= maxTxAmount, "Buy exceeds Max Tx limit"); } if (!automatedMarketMakerPairs[to]) { require( balanceOf(to) + amount <= maxWalletAmount, "AntiWhale: Balance exceeds max Wallet limit" ); } } uint256 feeAmount = amount.mul(fees).div(100); amount = amount.sub(feeAmount); super._transfer(from, address(this), feeAmount); } super._transfer(from, to, amount); } function swapAndSendToMarketing (uint256 tokens) private lockTheSwap { swapTokensForEth(tokens); (bool os, ) = payable(marketingWallet).call{value: address(this).balance}(""); require(os,"transaction failed"); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimStuckEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludefromLimit","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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_market","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_market","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mWallet","type":"address"}],"name":"updateMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052652d79883d2000600a556a260ce0ff28d2b2ee000000600b556103e8600f600b5462000031919062000a74565b6200003d919062000aee565b600c5560646002600b5462000053919062000a74565b6200005f919062000aee565b600d557339c737bc1fce9d0becdb9f4f38301bf4523f12b7600e60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c457600080fd5b506040518060400160405280601881526020017f41626f6c697368204461796c6967687420536176696e677300000000000000008152506040518060400160405280600481526020017f484f555200000000000000000000000000000000000000000000000000000000815250816003908162000142919062000d96565b50806004908162000154919062000d96565b505050620001776200016b620004bc60201b60201c565b620004c460201b60201c565b6005600860000160006101000a81548161ffff021916908361ffff1602179055506005600e60006101000a81548161ffff021916908361ffff160217905550600f600960000160006101000a81548161ffff021916908361ffff160217905550600f600e60026101000a81548161ffff021916908361ffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000282919062000ee7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000310919062000ee7565b6040518363ffffffff1660e01b81526004016200032f92919062000f2a565b6020604051808303816000875af11580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000ee7565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200040c8160016200058a60201b60201c565b6200042e62000420620006c060201b60201c565b6001620006ea60201b60201c565b62000441306001620006ea60201b60201c565b62000476600e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ea60201b60201c565b6001600e60046101000a81548160ff021916908315150217905550620004b4620004a5620006c060201b60201c565b600b54620008b960201b60201c565b505062001245565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006169062001004565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006fa620004bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000720620006c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007709062001076565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200080e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000805906200110e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008ad91906200114d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200092b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092290620011ba565b60405180910390fd5b6200093f6000838362000a3160201b60201c565b8060026000828254620009539190620011dc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009aa9190620011dc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a11919062001228565b60405180910390a362000a2d6000838362000a3660201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a818262000a3b565b915062000a8e8362000a3b565b925082820262000a9e8162000a3b565b9150828204841483151762000ab85762000ab762000a45565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000afb8262000a3b565b915062000b088362000a3b565b92508262000b1b5762000b1a62000abf565b5b828204905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ba857607f821691505b60208210810362000bbe5762000bbd62000b60565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000be9565b62000c34868362000be9565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000c7762000c7162000c6b8462000a3b565b62000c4c565b62000a3b565b9050919050565b6000819050919050565b62000c938362000c56565b62000cab62000ca28262000c7e565b84845462000bf6565b825550505050565b600090565b62000cc262000cb3565b62000ccf81848462000c88565b505050565b5b8181101562000cf75762000ceb60008262000cb8565b60018101905062000cd5565b5050565b601f82111562000d465762000d108162000bc4565b62000d1b8462000bd9565b8101602085101562000d2b578190505b62000d4362000d3a8562000bd9565b83018262000cd4565b50505b505050565b600082821c905092915050565b600062000d6b6000198460080262000d4b565b1980831691505092915050565b600062000d86838362000d58565b9150826002028217905092915050565b62000da18262000b26565b67ffffffffffffffff81111562000dbd5762000dbc62000b31565b5b62000dc9825462000b8f565b62000dd682828562000cfb565b600060209050601f83116001811462000e0e576000841562000df9578287015190505b62000e05858262000d78565b86555062000e75565b601f19841662000e1e8662000bc4565b60005b8281101562000e485784890151825560018201915060208501945060208101905062000e21565b8683101562000e68578489015162000e64601f89168262000d58565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eaf8262000e82565b9050919050565b62000ec18162000ea2565b811462000ecd57600080fd5b50565b60008151905062000ee18162000eb6565b92915050565b60006020828403121562000f005762000eff62000e7d565b5b600062000f108482850162000ed0565b91505092915050565b62000f248162000ea2565b82525050565b600060408201905062000f41600083018562000f19565b62000f50602083018462000f19565b9392505050565b600082825260208201905092915050565b7f41424f4c4953483a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b600062000fec60418362000f57565b915062000ff98262000f68565b606082019050919050565b600060208201905081810360008301526200101f8162000fdd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200105e60208362000f57565b91506200106b8262001026565b602082019050919050565b6000602082019050818103600083015262001091816200104f565b9050919050565b7f41424f4c4953483a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f66206578636c75646564000000000000000000000000000000602082015250565b6000620010f660318362000f57565b9150620011038262001098565b604082019050919050565b600060208201905081810360008301526200112981620010e7565b9050919050565b60008115159050919050565b620011478162001130565b82525050565b60006020820190506200116460008301846200113c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011a2601f8362000f57565b9150620011af826200116a565b602082019050919050565b60006020820190508181036000830152620011d58162001193565b9050919050565b6000620011e98262000a3b565b9150620011f68362000a3b565b925082820190508082111562001211576200121062000a45565b5b92915050565b620012228162000a3b565b82525050565b60006020820190506200123f600083018462001217565b92915050565b614fd580620012556000396000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063c851cc321161006f578063c851cc32146107ce578063dd62ed3e146107f7578063ec28438a14610834578063f2fde38b1461085d578063f9d0831a1461088657610225565b8063a9059cbb146106d7578063aa4bde2814610714578063ad73fc3e1461073f578063b62496f514610768578063c0246668146107a557610225565b80638da5cb5b116100f25780638da5cb5b146105f257806395d89b411461061d5780639a7a23d6146106485780639d0014b114610671578063a457c2d71461069a57610225565b8063715018a6146105705780637537a47f146105875780638a8c523c146105b05780638c0b5e22146105c757610225565b806339509351116101a65780634d474d42116101755780634d474d42146104795780634fbee193146104a25780635d0044ca146104df5780636ddd17131461050857806370a082311461053357610225565b806339509351146103bd57806343c348a5146103fa578063470624021461042357806349bd5a5e1461044e57610225565b80631694505e116101ed5780631694505e146102d457806318160ddd146102ff57806323b872dd1461032a5780632b14ca5614610367578063313ce5671461039257610225565b80630445b6671461022a57806306fdde0314610255578063095ea7b31461028057806312e322b3146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108af565b60405161024c919061363d565b60405180910390f35b34801561026157600080fd5b5061026a6108b5565b60405161027791906136e8565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a291906137a8565b610947565b6040516102b49190613803565b60405180910390f35b3480156102c957600080fd5b506102d2610965565b005b3480156102e057600080fd5b506102e9610ab2565b6040516102f6919061387d565b60405180910390f35b34801561030b57600080fd5b50610314610ad8565b604051610321919061363d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613898565b610ae2565b60405161035e9190613803565b60405180910390f35b34801561037357600080fd5b5061037c610bda565b6040516103899190613908565b60405180910390f35b34801561039e57600080fd5b506103a7610bf4565b6040516103b4919061393f565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df91906137a8565b610bfd565b6040516103f19190613803565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613986565b610ca9565b005b34801561042f57600080fd5b50610438610dbd565b6040516104459190613908565b60405180910390f35b34801561045a57600080fd5b50610463610dd7565b60405161047091906139c2565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906139dd565b610dfd565b005b3480156104ae57600080fd5b506104c960048036038101906104c491906139dd565b610f2c565b6040516104d69190613803565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613a0a565b610f82565b005b34801561051457600080fd5b5061051d611079565b60405161052a9190613803565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906139dd565b61108c565b604051610567919061363d565b60405180910390f35b34801561057c57600080fd5b506105856110d4565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613a63565b61115c565b005b3480156105bc57600080fd5b506105c5611233565b005b3480156105d357600080fd5b506105dc6112cc565b6040516105e9919061363d565b60405180910390f35b3480156105fe57600080fd5b506106076112d2565b60405161061491906139c2565b60405180910390f35b34801561062957600080fd5b506106326112fc565b60405161063f91906136e8565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613a63565b61138e565b005b34801561067d57600080fd5b5061069860048036038101906106939190613a0a565b6114a8565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906137a8565b611574565b6040516106ce9190613803565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906137a8565b61165f565b60405161070b9190613803565b60405180910390f35b34801561072057600080fd5b5061072961167d565b604051610736919061363d565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613986565b611683565b005b34801561077457600080fd5b5061078f600480360381019061078a91906139dd565b611797565b60405161079c9190613803565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613a63565b6117b7565b005b3480156107da57600080fd5b506107f560048036038101906107f091906139dd565b61196e565b005b34801561080357600080fd5b5061081e60048036038101906108199190613aa3565b611eb8565b60405161082b919061363d565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a0a565b611f3f565b005b34801561086957600080fd5b50610884600480360381019061087f91906139dd565b612036565b005b34801561089257600080fd5b506108ad60048036038101906108a891906139dd565b61212d565b005b600a5481565b6060600380546108c490613b12565b80601f01602080910402602001604051908101604052809291908181526020018280546108f090613b12565b801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b600061095b61095461230a565b8484612312565b6001905092915050565b61096d61230a565b73ffffffffffffffffffffffffffffffffffffffff1661098b6112d2565b73ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613b8f565b60405180910390fd5b6000600e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a2990613be0565b60006040518083038185875af1925050503d8060008114610a66576040519150601f19603f3d011682016040523d82523d6000602084013e610a6b565b606091505b5050905080610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613c41565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610aef8484846124db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b3a61230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190613cd3565b60405180910390fd5b610bce85610bc661230a565b858403612312565b60019150509392505050565b60098060000160009054906101000a900461ffff16905081565b60006012905090565b6000610c9f610c0a61230a565b848460016000610c1861230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9a9190613d22565b612312565b6001905092915050565b610cb161230a565b73ffffffffffffffffffffffffffffffffffffffff16610ccf6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613b8f565b60405180910390fd5b80600860000160006101000a81548161ffff021916908361ffff16021790555080600e60006101000a81548161ffff021916908361ffff160217905550600a600e60009054906101000a900461ffff1661ffff161115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613da2565b60405180910390fd5b50565b60088060000160009054906101000a900461ffff16905081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0561230a565b73ffffffffffffffffffffffffffffffffffffffff16610e236112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613e34565b60405180910390fd5b80600e60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f8a61230a565b73ffffffffffffffffffffffffffffffffffffffff16610fa86112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590613b8f565b60405180910390fd5b68056bc75e2d63100000611010610ad8565b61101a9190613e83565b81101561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613f26565b60405180910390fd5b670de0b6b3a7640000816110709190613f46565b600d8190555050565b600e60049054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110dc61230a565b73ffffffffffffffffffffffffffffffffffffffff166110fa6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114790613b8f565b60405180910390fd5b61115a6000612e02565b565b61116461230a565b73ffffffffffffffffffffffffffffffffffffffff166111826112d2565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613b8f565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61123b61230a565b73ffffffffffffffffffffffffffffffffffffffff166112596112d2565b73ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b8f565b60405180910390fd5b6001600e60056101000a81548160ff021916908315150217905550565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461130b90613b12565b80601f016020809104026020016040519081016040528092919081815260200182805461133790613b12565b80156113845780601f1061135957610100808354040283529160200191611384565b820191906000526020600020905b81548152906001019060200180831161136757829003601f168201915b5050505050905090565b61139661230a565b73ffffffffffffffffffffffffffffffffffffffff166113b46112d2565b73ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190613b8f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190614020565b60405180910390fd5b6114a48282612ec8565b5050565b6114b061230a565b73ffffffffffffffffffffffffffffffffffffffff166114ce6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90613b8f565b60405180910390fd5b633b9aca00811161156a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611561906140b2565b60405180910390fd5b80600a8190555050565b6000806001600061158361230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790614144565b60405180910390fd5b61165461164b61230a565b85858403612312565b600191505092915050565b600061167361166c61230a565b84846124db565b6001905092915050565b600d5481565b61168b61230a565b73ffffffffffffffffffffffffffffffffffffffff166116a96112d2565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613b8f565b60405180910390fd5b80600960000160006101000a81548161ffff021916908361ffff16021790555080600e60026101000a81548161ffff021916908361ffff160217905550600f600e60029054906101000a900461ffff1661ffff161115611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906141b0565b60405180910390fd5b50565b60116020528060005260406000206000915054906101000a900460ff1681565b6117bf61230a565b73ffffffffffffffffffffffffffffffffffffffff166117dd6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613b8f565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90614242565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119629190613803565b60405180910390a25050565b61197661230a565b73ffffffffffffffffffffffffffffffffffffffff166119946112d2565b73ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190613b8f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a71906142d4565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4e9190614309565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190614309565b6040518363ffffffff1660e01b8152600401611c18929190614336565b602060405180830381865afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190614309565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7257600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190614309565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190614309565b6040518363ffffffff1660e01b8152600401611dea929190614336565b6020604051808303816000875af1158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190614309565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb4565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4761230a565b73ffffffffffffffffffffffffffffffffffffffff16611f656112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613b8f565b60405180910390fd5b683635c9adc5dea00000611fcd610ad8565b611fd79190613e83565b811015612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906143d1565b60405180910390fd5b670de0b6b3a76400008161202d9190613f46565b600c8190555050565b61203e61230a565b73ffffffffffffffffffffffffffffffffffffffff1661205c6112d2565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890614463565b60405180910390fd5b61212a81612e02565b50565b61213561230a565b73ffffffffffffffffffffffffffffffffffffffff166121536112d2565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090613b8f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121fb576121f56121e76112d2565b6121f03061108c565b61165f565b50612307565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161223b91906139c2565b602060405180830381865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190614498565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6122a26112d2565b836040518363ffffffff1660e01b81526004016122c09291906144c5565b6020604051808303816000875af11580156122df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123039190614503565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906145a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614634565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ce919061363d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906146c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614758565b60405180910390fd5b600e60059054906101000a900460ff168061261d5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906147c4565b60405180910390fd5b600081036126755761267083836000612ffb565b612dfd565b6000600267ffffffffffffffff811115612692576126916147e4565b5b6040519080825280602002602001820160405280156126c05781602001602082028036833780820191505090505b50905030816000815181106126d8576126d7614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190614309565b816001815181106127b7576127b6614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000806127fd3061108c565b11156128cc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f61284a3061108c565b846040518363ffffffff1660e01b8152600401612868929190614900565b600060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128ae9190614a49565b6001815181106128c1576128c0614813565b5b602002602001015190505b60006128d73061108c565b90506000600a548310159050600e60049054906101000a900460ff16801561290c5750600760149054906101000a900460ff16155b80156129665750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b801561296f5750805b1561298457600082905061298281613284565b505b600060019050600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a2b5750600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a3557600090505b8015612dec576000601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aab57600e60029054906101000a900461ffff1661ffff169050612b16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b1557600e60009054906101000a900461ffff1661ffff1690505b5b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bba5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d9f57601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c5b57600c54871115612c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4d90614ade565b60405180910390fd5b612cf4565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf357600c54871115612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce990614b4a565b60405180910390fd5b5b5b601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d9e57600d5487612d528a61108c565b612d5c9190613d22565b1115612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9490614bdc565b60405180910390fd5b5b5b6000612dc76064612db9848b61339590919063ffffffff16565b6133ab90919063ffffffff16565b9050612ddc81896133c190919063ffffffff16565b9750612de98a3083612ffb565b50505b612df7888888612ffb565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614c94565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614d26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090614db8565b60405180910390fd5b6130e48383836133d7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614e4a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fd9190613d22565b925050819055506000821115613273578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161326a919061363d565b60405180910390a35b61327e8484846133dc565b50505050565b6001600760146101000a81548160ff0219169083151502179055506132a8816133e1565b6000600e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516132f090613be0565b60006040518083038185875af1925050503d806000811461332d576040519150601f19603f3d011682016040523d82523d6000602084013e613332565b606091505b5050905080613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90614eb6565b60405180910390fd5b506000600760146101000a81548160ff02191690831515021790555050565b600081836133a39190613f46565b905092915050565b600081836133b99190613e83565b905092915050565b600081836133cf9190614ed6565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156133fe576133fd6147e4565b5b60405190808252806020026020018201604052801561342c5781602001602082028036833780820191505090505b509050308160008151811061344457613443614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350f9190614309565b8160018151811061352357613522614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061358a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612312565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135ee959493929190614f45565b600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b505050505050565b6000819050919050565b61363781613624565b82525050565b6000602082019050613652600083018461362e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613692578082015181840152602081019050613677565b60008484015250505050565b6000601f19601f8301169050919050565b60006136ba82613658565b6136c48185613663565b93506136d4818560208601613674565b6136dd8161369e565b840191505092915050565b6000602082019050818103600083015261370281846136af565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137498261371e565b9050919050565b6137598161373e565b811461376457600080fd5b50565b60008135905061377681613750565b92915050565b61378581613624565b811461379057600080fd5b50565b6000813590506137a28161377c565b92915050565b600080604083850312156137bf576137be613714565b5b60006137cd85828601613767565b92505060206137de85828601613793565b9150509250929050565b60008115159050919050565b6137fd816137e8565b82525050565b600060208201905061381860008301846137f4565b92915050565b6000819050919050565b600061384361383e6138398461371e565b61381e565b61371e565b9050919050565b600061385582613828565b9050919050565b60006138678261384a565b9050919050565b6138778161385c565b82525050565b6000602082019050613892600083018461386e565b92915050565b6000806000606084860312156138b1576138b0613714565b5b60006138bf86828701613767565b93505060206138d086828701613767565b92505060406138e186828701613793565b9150509250925092565b600061ffff82169050919050565b613902816138eb565b82525050565b600060208201905061391d60008301846138f9565b92915050565b600060ff82169050919050565b61393981613923565b82525050565b60006020820190506139546000830184613930565b92915050565b613963816138eb565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b60006020828403121561399c5761399b613714565b5b60006139aa84828501613971565b91505092915050565b6139bc8161373e565b82525050565b60006020820190506139d760008301846139b3565b92915050565b6000602082840312156139f3576139f2613714565b5b6000613a0184828501613767565b91505092915050565b600060208284031215613a2057613a1f613714565b5b6000613a2e84828501613793565b91505092915050565b613a40816137e8565b8114613a4b57600080fd5b50565b600081359050613a5d81613a37565b92915050565b60008060408385031215613a7a57613a79613714565b5b6000613a8885828601613767565b9250506020613a9985828601613a4e565b9150509250929050565b60008060408385031215613aba57613ab9613714565b5b6000613ac885828601613767565b9250506020613ad985828601613767565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2a57607f821691505b602082108103613b3d57613b3c613ae3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b79602083613663565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b600081905092915050565b50565b6000613bca600083613baf565b9150613bd582613bba565b600082019050919050565b6000613beb82613bbd565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613c2b601383613663565b9150613c3682613bf5565b602082019050919050565b60006020820190508181036000830152613c5a81613c1e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613cbd602883613663565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d2d82613624565b9150613d3883613624565b9250828201905080821115613d5057613d4f613cf3565b5b92915050565b7f4d6158206275792066656573206c696d69742020697320313025000000000000600082015250565b6000613d8c601a83613663565b9150613d9782613d56565b602082019050919050565b60006020820190508181036000830152613dbb81613d7f565b9050919050565b7f6d61726b6574696e672077616c6c65742063616e206e6f742062652061207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e1e602a83613663565b9150613e2982613dc2565b604082019050919050565b60006020820190508181036000830152613e4d81613e11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e8e82613624565b9150613e9983613624565b925082613ea957613ea8613e54565b5b828204905092915050565b7f4d61782057616c6c657420616d6f756e742073686f756c64206265203125206f60008201527f72206d6f7265206f662074686520737570706c79000000000000000000000000602082015250565b6000613f10603483613663565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b6000613f5182613624565b9150613f5c83613624565b9250828202613f6a81613624565b91508282048414831517613f8157613f80613cf3565b5b5092915050565b7f41424f4c4953483a2054686520756e697377617020706169722063616e6e6f7460008201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b657460208201527f4d616b6572506169727300000000000000000000000000000000000000000000604082015250565b600061400a604a83613663565b915061401582613f88565b606082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b7f7468726573686f6c642073686f756c642062652067726561746f72207468616e60008201527f2031206777656900000000000000000000000000000000000000000000000000602082015250565b600061409c602783613663565b91506140a782614040565b604082019050919050565b600060208201905081810360008301526140cb8161408f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061412e602583613663565b9150614139826140d2565b604082019050919050565b6000602082019050818103600083015261415d81614121565b9050919050565b7f4d6158206275792066656573206c696d69742020697320313525000000000000600082015250565b600061419a601a83613663565b91506141a582614164565b602082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b7f41424f4c4953483a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f66206578636c75646564000000000000000000000000000000602082015250565b600061422c603183613663565b9150614237826141d0565b604082019050919050565b6000602082019050818103600083015261425b8161421f565b9050919050565b7f41424f4c4953483a2054686520726f7574657220616c7265616479206861732060008201527f7468617420616464726573730000000000000000000000000000000000000000602082015250565b60006142be602c83613663565b91506142c982614262565b604082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b60008151905061430381613750565b92915050565b60006020828403121561431f5761431e613714565b5b600061432d848285016142f4565b91505092915050565b600060408201905061434b60008301856139b3565b61435860208301846139b3565b9392505050565b7f4d617820547820616d6f756e742073686f756c6420626520302e3125206f662060008201527f6d6f7265206f662074686520737570706c790000000000000000000000000000602082015250565b60006143bb603283613663565b91506143c68261435f565b604082019050919050565b600060208201905081810360008301526143ea816143ae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061444d602683613663565b9150614458826143f1565b604082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b6000815190506144928161377c565b92915050565b6000602082840312156144ae576144ad613714565b5b60006144bc84828501614483565b91505092915050565b60006040820190506144da60008301856139b3565b6144e7602083018461362e565b9392505050565b6000815190506144fd81613a37565b92915050565b60006020828403121561451957614518613714565b5b6000614527848285016144ee565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061458c602483613663565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061461e602283613663565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f484f55523a207472616e736665722066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146b0602483613663565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f484f55523a207472616e7366657220746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614742602283613663565b915061474d826146e6565b604082019050919050565b6000602082019050818103600083015261477181614735565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b60006147ae601783613663565b91506147b982614778565b602082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148778161373e565b82525050565b6000614889838361486e565b60208301905092915050565b6000602082019050919050565b60006148ad82614842565b6148b7818561484d565b93506148c28361485e565b8060005b838110156148f35781516148da888261487d565b97506148e583614895565b9250506001810190506148c6565b5085935050505092915050565b6000604082019050614915600083018561362e565b818103602083015261492781846148a2565b90509392505050565b600080fd5b61493e8261369e565b810181811067ffffffffffffffff8211171561495d5761495c6147e4565b5b80604052505050565b600061497061370a565b905061497c8282614935565b919050565b600067ffffffffffffffff82111561499c5761499b6147e4565b5b602082029050602081019050919050565b600080fd5b60006149c56149c084614981565b614966565b905080838252602082019050602084028301858111156149e8576149e76149ad565b5b835b81811015614a1157806149fd8882614483565b8452602084019350506020810190506149ea565b5050509392505050565b600082601f830112614a3057614a2f614930565b5b8151614a408482602086016149b2565b91505092915050565b600060208284031215614a5f57614a5e613714565b5b600082015167ffffffffffffffff811115614a7d57614a7c613719565b5b614a8984828501614a1b565b91505092915050565b7f53656c6c2065786365656473204d6178205478206c696d697400000000000000600082015250565b6000614ac8601983613663565b9150614ad382614a92565b602082019050919050565b60006020820190508181036000830152614af781614abb565b9050919050565b7f4275792065786365656473204d6178205478206c696d69740000000000000000600082015250565b6000614b34601883613663565b9150614b3f82614afe565b602082019050919050565b60006020820190508181036000830152614b6381614b27565b9050919050565b7f416e74695768616c653a2042616c616e63652065786365656473206d6178205760008201527f616c6c6574206c696d6974000000000000000000000000000000000000000000602082015250565b6000614bc6602b83613663565b9150614bd182614b6a565b604082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b7f41424f4c4953483a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b6000614c7e604183613663565b9150614c8982614bfc565b606082019050919050565b60006020820190508181036000830152614cad81614c71565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602583613663565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614da2602383613663565b9150614dad82614d46565b604082019050919050565b60006020820190508181036000830152614dd181614d95565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e34602683613663565b9150614e3f82614dd8565b604082019050919050565b60006020820190508181036000830152614e6381614e27565b9050919050565b7f7472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b6000614ea0601283613663565b9150614eab82614e6a565b602082019050919050565b60006020820190508181036000830152614ecf81614e93565b9050919050565b6000614ee182613624565b9150614eec83613624565b9250828203905081811115614f0457614f03613cf3565b5b92915050565b6000819050919050565b6000614f2f614f2a614f2584614f0a565b61381e565b613624565b9050919050565b614f3f81614f14565b82525050565b600060a082019050614f5a600083018861362e565b614f676020830187614f36565b8181036040830152614f7981866148a2565b9050614f8860608301856139b3565b614f95608083018461362e565b969550505050505056fea2646970667358221220be53f31525b3927161dbe82d428c60bd7dc9b544133a2558f995d8294397104e64736f6c63430008110033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063c851cc321161006f578063c851cc32146107ce578063dd62ed3e146107f7578063ec28438a14610834578063f2fde38b1461085d578063f9d0831a1461088657610225565b8063a9059cbb146106d7578063aa4bde2814610714578063ad73fc3e1461073f578063b62496f514610768578063c0246668146107a557610225565b80638da5cb5b116100f25780638da5cb5b146105f257806395d89b411461061d5780639a7a23d6146106485780639d0014b114610671578063a457c2d71461069a57610225565b8063715018a6146105705780637537a47f146105875780638a8c523c146105b05780638c0b5e22146105c757610225565b806339509351116101a65780634d474d42116101755780634d474d42146104795780634fbee193146104a25780635d0044ca146104df5780636ddd17131461050857806370a082311461053357610225565b806339509351146103bd57806343c348a5146103fa578063470624021461042357806349bd5a5e1461044e57610225565b80631694505e116101ed5780631694505e146102d457806318160ddd146102ff57806323b872dd1461032a5780632b14ca5614610367578063313ce5671461039257610225565b80630445b6671461022a57806306fdde0314610255578063095ea7b31461028057806312e322b3146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108af565b60405161024c919061363d565b60405180910390f35b34801561026157600080fd5b5061026a6108b5565b60405161027791906136e8565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a291906137a8565b610947565b6040516102b49190613803565b60405180910390f35b3480156102c957600080fd5b506102d2610965565b005b3480156102e057600080fd5b506102e9610ab2565b6040516102f6919061387d565b60405180910390f35b34801561030b57600080fd5b50610314610ad8565b604051610321919061363d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613898565b610ae2565b60405161035e9190613803565b60405180910390f35b34801561037357600080fd5b5061037c610bda565b6040516103899190613908565b60405180910390f35b34801561039e57600080fd5b506103a7610bf4565b6040516103b4919061393f565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df91906137a8565b610bfd565b6040516103f19190613803565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613986565b610ca9565b005b34801561042f57600080fd5b50610438610dbd565b6040516104459190613908565b60405180910390f35b34801561045a57600080fd5b50610463610dd7565b60405161047091906139c2565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906139dd565b610dfd565b005b3480156104ae57600080fd5b506104c960048036038101906104c491906139dd565b610f2c565b6040516104d69190613803565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613a0a565b610f82565b005b34801561051457600080fd5b5061051d611079565b60405161052a9190613803565b60405180910390f35b34801561053f57600080fd5b5061055a600480360381019061055591906139dd565b61108c565b604051610567919061363d565b60405180910390f35b34801561057c57600080fd5b506105856110d4565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613a63565b61115c565b005b3480156105bc57600080fd5b506105c5611233565b005b3480156105d357600080fd5b506105dc6112cc565b6040516105e9919061363d565b60405180910390f35b3480156105fe57600080fd5b506106076112d2565b60405161061491906139c2565b60405180910390f35b34801561062957600080fd5b506106326112fc565b60405161063f91906136e8565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613a63565b61138e565b005b34801561067d57600080fd5b5061069860048036038101906106939190613a0a565b6114a8565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906137a8565b611574565b6040516106ce9190613803565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906137a8565b61165f565b60405161070b9190613803565b60405180910390f35b34801561072057600080fd5b5061072961167d565b604051610736919061363d565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613986565b611683565b005b34801561077457600080fd5b5061078f600480360381019061078a91906139dd565b611797565b60405161079c9190613803565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613a63565b6117b7565b005b3480156107da57600080fd5b506107f560048036038101906107f091906139dd565b61196e565b005b34801561080357600080fd5b5061081e60048036038101906108199190613aa3565b611eb8565b60405161082b919061363d565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a0a565b611f3f565b005b34801561086957600080fd5b50610884600480360381019061087f91906139dd565b612036565b005b34801561089257600080fd5b506108ad60048036038101906108a891906139dd565b61212d565b005b600a5481565b6060600380546108c490613b12565b80601f01602080910402602001604051908101604052809291908181526020018280546108f090613b12565b801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b600061095b61095461230a565b8484612312565b6001905092915050565b61096d61230a565b73ffffffffffffffffffffffffffffffffffffffff1661098b6112d2565b73ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613b8f565b60405180910390fd5b6000600e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a2990613be0565b60006040518083038185875af1925050503d8060008114610a66576040519150601f19603f3d011682016040523d82523d6000602084013e610a6b565b606091505b5050905080610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613c41565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610aef8484846124db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b3a61230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190613cd3565b60405180910390fd5b610bce85610bc661230a565b858403612312565b60019150509392505050565b60098060000160009054906101000a900461ffff16905081565b60006012905090565b6000610c9f610c0a61230a565b848460016000610c1861230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9a9190613d22565b612312565b6001905092915050565b610cb161230a565b73ffffffffffffffffffffffffffffffffffffffff16610ccf6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613b8f565b60405180910390fd5b80600860000160006101000a81548161ffff021916908361ffff16021790555080600e60006101000a81548161ffff021916908361ffff160217905550600a600e60009054906101000a900461ffff1661ffff161115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613da2565b60405180910390fd5b50565b60088060000160009054906101000a900461ffff16905081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0561230a565b73ffffffffffffffffffffffffffffffffffffffff16610e236112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613e34565b60405180910390fd5b80600e60066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f8a61230a565b73ffffffffffffffffffffffffffffffffffffffff16610fa86112d2565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590613b8f565b60405180910390fd5b68056bc75e2d63100000611010610ad8565b61101a9190613e83565b81101561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613f26565b60405180910390fd5b670de0b6b3a7640000816110709190613f46565b600d8190555050565b600e60049054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110dc61230a565b73ffffffffffffffffffffffffffffffffffffffff166110fa6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114790613b8f565b60405180910390fd5b61115a6000612e02565b565b61116461230a565b73ffffffffffffffffffffffffffffffffffffffff166111826112d2565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613b8f565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61123b61230a565b73ffffffffffffffffffffffffffffffffffffffff166112596112d2565b73ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b8f565b60405180910390fd5b6001600e60056101000a81548160ff021916908315150217905550565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461130b90613b12565b80601f016020809104026020016040519081016040528092919081815260200182805461133790613b12565b80156113845780601f1061135957610100808354040283529160200191611384565b820191906000526020600020905b81548152906001019060200180831161136757829003601f168201915b5050505050905090565b61139661230a565b73ffffffffffffffffffffffffffffffffffffffff166113b46112d2565b73ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190613b8f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190614020565b60405180910390fd5b6114a48282612ec8565b5050565b6114b061230a565b73ffffffffffffffffffffffffffffffffffffffff166114ce6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90613b8f565b60405180910390fd5b633b9aca00811161156a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611561906140b2565b60405180910390fd5b80600a8190555050565b6000806001600061158361230a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790614144565b60405180910390fd5b61165461164b61230a565b85858403612312565b600191505092915050565b600061167361166c61230a565b84846124db565b6001905092915050565b600d5481565b61168b61230a565b73ffffffffffffffffffffffffffffffffffffffff166116a96112d2565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613b8f565b60405180910390fd5b80600960000160006101000a81548161ffff021916908361ffff16021790555080600e60026101000a81548161ffff021916908361ffff160217905550600f600e60029054906101000a900461ffff1661ffff161115611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906141b0565b60405180910390fd5b50565b60116020528060005260406000206000915054906101000a900460ff1681565b6117bf61230a565b73ffffffffffffffffffffffffffffffffffffffff166117dd6112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613b8f565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90614242565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119629190613803565b60405180910390a25050565b61197661230a565b73ffffffffffffffffffffffffffffffffffffffff166119946112d2565b73ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190613b8f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a71906142d4565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4e9190614309565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190614309565b6040518363ffffffff1660e01b8152600401611c18929190614336565b602060405180830381865afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190614309565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7257600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190614309565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190614309565b6040518363ffffffff1660e01b8152600401611dea929190614336565b6020604051808303816000875af1158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190614309565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb4565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4761230a565b73ffffffffffffffffffffffffffffffffffffffff16611f656112d2565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613b8f565b60405180910390fd5b683635c9adc5dea00000611fcd610ad8565b611fd79190613e83565b811015612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906143d1565b60405180910390fd5b670de0b6b3a76400008161202d9190613f46565b600c8190555050565b61203e61230a565b73ffffffffffffffffffffffffffffffffffffffff1661205c6112d2565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890614463565b60405180910390fd5b61212a81612e02565b50565b61213561230a565b73ffffffffffffffffffffffffffffffffffffffff166121536112d2565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090613b8f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121fb576121f56121e76112d2565b6121f03061108c565b61165f565b50612307565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161223b91906139c2565b602060405180830381865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190614498565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6122a26112d2565b836040518363ffffffff1660e01b81526004016122c09291906144c5565b6020604051808303816000875af11580156122df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123039190614503565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906145a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614634565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ce919061363d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906146c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614758565b60405180910390fd5b600e60059054906101000a900460ff168061261d5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906147c4565b60405180910390fd5b600081036126755761267083836000612ffb565b612dfd565b6000600267ffffffffffffffff811115612692576126916147e4565b5b6040519080825280602002602001820160405280156126c05781602001602082028036833780820191505090505b50905030816000815181106126d8576126d7614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190614309565b816001815181106127b7576127b6614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000806127fd3061108c565b11156128cc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f61284a3061108c565b846040518363ffffffff1660e01b8152600401612868929190614900565b600060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128ae9190614a49565b6001815181106128c1576128c0614813565b5b602002602001015190505b60006128d73061108c565b90506000600a548310159050600e60049054906101000a900460ff16801561290c5750600760149054906101000a900460ff16155b80156129665750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b801561296f5750805b1561298457600082905061298281613284565b505b600060019050600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a2b5750600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a3557600090505b8015612dec576000601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aab57600e60029054906101000a900461ffff1661ffff169050612b16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b1557600e60009054906101000a900461ffff1661ffff1690505b5b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bba5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d9f57601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c5b57600c54871115612c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4d90614ade565b60405180910390fd5b612cf4565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf357600c54871115612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce990614b4a565b60405180910390fd5b5b5b601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d9e57600d5487612d528a61108c565b612d5c9190613d22565b1115612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9490614bdc565b60405180910390fd5b5b5b6000612dc76064612db9848b61339590919063ffffffff16565b6133ab90919063ffffffff16565b9050612ddc81896133c190919063ffffffff16565b9750612de98a3083612ffb565b50505b612df7888888612ffb565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614c94565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614d26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d090614db8565b60405180910390fd5b6130e48383836133d7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614e4a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fd9190613d22565b925050819055506000821115613273578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161326a919061363d565b60405180910390a35b61327e8484846133dc565b50505050565b6001600760146101000a81548160ff0219169083151502179055506132a8816133e1565b6000600e60069054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516132f090613be0565b60006040518083038185875af1925050503d806000811461332d576040519150601f19603f3d011682016040523d82523d6000602084013e613332565b606091505b5050905080613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90614eb6565b60405180910390fd5b506000600760146101000a81548160ff02191690831515021790555050565b600081836133a39190613f46565b905092915050565b600081836133b99190613e83565b905092915050565b600081836133cf9190614ed6565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156133fe576133fd6147e4565b5b60405190808252806020026020018201604052801561342c5781602001602082028036833780820191505090505b509050308160008151811061344457613443614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350f9190614309565b8160018151811061352357613522614813565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061358a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612312565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135ee959493929190614f45565b600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b505050505050565b6000819050919050565b61363781613624565b82525050565b6000602082019050613652600083018461362e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613692578082015181840152602081019050613677565b60008484015250505050565b6000601f19601f8301169050919050565b60006136ba82613658565b6136c48185613663565b93506136d4818560208601613674565b6136dd8161369e565b840191505092915050565b6000602082019050818103600083015261370281846136af565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137498261371e565b9050919050565b6137598161373e565b811461376457600080fd5b50565b60008135905061377681613750565b92915050565b61378581613624565b811461379057600080fd5b50565b6000813590506137a28161377c565b92915050565b600080604083850312156137bf576137be613714565b5b60006137cd85828601613767565b92505060206137de85828601613793565b9150509250929050565b60008115159050919050565b6137fd816137e8565b82525050565b600060208201905061381860008301846137f4565b92915050565b6000819050919050565b600061384361383e6138398461371e565b61381e565b61371e565b9050919050565b600061385582613828565b9050919050565b60006138678261384a565b9050919050565b6138778161385c565b82525050565b6000602082019050613892600083018461386e565b92915050565b6000806000606084860312156138b1576138b0613714565b5b60006138bf86828701613767565b93505060206138d086828701613767565b92505060406138e186828701613793565b9150509250925092565b600061ffff82169050919050565b613902816138eb565b82525050565b600060208201905061391d60008301846138f9565b92915050565b600060ff82169050919050565b61393981613923565b82525050565b60006020820190506139546000830184613930565b92915050565b613963816138eb565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b60006020828403121561399c5761399b613714565b5b60006139aa84828501613971565b91505092915050565b6139bc8161373e565b82525050565b60006020820190506139d760008301846139b3565b92915050565b6000602082840312156139f3576139f2613714565b5b6000613a0184828501613767565b91505092915050565b600060208284031215613a2057613a1f613714565b5b6000613a2e84828501613793565b91505092915050565b613a40816137e8565b8114613a4b57600080fd5b50565b600081359050613a5d81613a37565b92915050565b60008060408385031215613a7a57613a79613714565b5b6000613a8885828601613767565b9250506020613a9985828601613a4e565b9150509250929050565b60008060408385031215613aba57613ab9613714565b5b6000613ac885828601613767565b9250506020613ad985828601613767565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2a57607f821691505b602082108103613b3d57613b3c613ae3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b79602083613663565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b600081905092915050565b50565b6000613bca600083613baf565b9150613bd582613bba565b600082019050919050565b6000613beb82613bbd565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613c2b601383613663565b9150613c3682613bf5565b602082019050919050565b60006020820190508181036000830152613c5a81613c1e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613cbd602883613663565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d2d82613624565b9150613d3883613624565b9250828201905080821115613d5057613d4f613cf3565b5b92915050565b7f4d6158206275792066656573206c696d69742020697320313025000000000000600082015250565b6000613d8c601a83613663565b9150613d9782613d56565b602082019050919050565b60006020820190508181036000830152613dbb81613d7f565b9050919050565b7f6d61726b6574696e672077616c6c65742063616e206e6f742062652061207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e1e602a83613663565b9150613e2982613dc2565b604082019050919050565b60006020820190508181036000830152613e4d81613e11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e8e82613624565b9150613e9983613624565b925082613ea957613ea8613e54565b5b828204905092915050565b7f4d61782057616c6c657420616d6f756e742073686f756c64206265203125206f60008201527f72206d6f7265206f662074686520737570706c79000000000000000000000000602082015250565b6000613f10603483613663565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b6000613f5182613624565b9150613f5c83613624565b9250828202613f6a81613624565b91508282048414831517613f8157613f80613cf3565b5b5092915050565b7f41424f4c4953483a2054686520756e697377617020706169722063616e6e6f7460008201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b657460208201527f4d616b6572506169727300000000000000000000000000000000000000000000604082015250565b600061400a604a83613663565b915061401582613f88565b606082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b7f7468726573686f6c642073686f756c642062652067726561746f72207468616e60008201527f2031206777656900000000000000000000000000000000000000000000000000602082015250565b600061409c602783613663565b91506140a782614040565b604082019050919050565b600060208201905081810360008301526140cb8161408f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061412e602583613663565b9150614139826140d2565b604082019050919050565b6000602082019050818103600083015261415d81614121565b9050919050565b7f4d6158206275792066656573206c696d69742020697320313525000000000000600082015250565b600061419a601a83613663565b91506141a582614164565b602082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b7f41424f4c4953483a204163636f756e7420697320616c7265616479207468652060008201527f76616c7565206f66206578636c75646564000000000000000000000000000000602082015250565b600061422c603183613663565b9150614237826141d0565b604082019050919050565b6000602082019050818103600083015261425b8161421f565b9050919050565b7f41424f4c4953483a2054686520726f7574657220616c7265616479206861732060008201527f7468617420616464726573730000000000000000000000000000000000000000602082015250565b60006142be602c83613663565b91506142c982614262565b604082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b60008151905061430381613750565b92915050565b60006020828403121561431f5761431e613714565b5b600061432d848285016142f4565b91505092915050565b600060408201905061434b60008301856139b3565b61435860208301846139b3565b9392505050565b7f4d617820547820616d6f756e742073686f756c6420626520302e3125206f662060008201527f6d6f7265206f662074686520737570706c790000000000000000000000000000602082015250565b60006143bb603283613663565b91506143c68261435f565b604082019050919050565b600060208201905081810360008301526143ea816143ae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061444d602683613663565b9150614458826143f1565b604082019050919050565b6000602082019050818103600083015261447c81614440565b9050919050565b6000815190506144928161377c565b92915050565b6000602082840312156144ae576144ad613714565b5b60006144bc84828501614483565b91505092915050565b60006040820190506144da60008301856139b3565b6144e7602083018461362e565b9392505050565b6000815190506144fd81613a37565b92915050565b60006020828403121561451957614518613714565b5b6000614527848285016144ee565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061458c602483613663565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061461e602283613663565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f484f55523a207472616e736665722066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146b0602483613663565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f484f55523a207472616e7366657220746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614742602283613663565b915061474d826146e6565b604082019050919050565b6000602082019050818103600083015261477181614735565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b60006147ae601783613663565b91506147b982614778565b602082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148778161373e565b82525050565b6000614889838361486e565b60208301905092915050565b6000602082019050919050565b60006148ad82614842565b6148b7818561484d565b93506148c28361485e565b8060005b838110156148f35781516148da888261487d565b97506148e583614895565b9250506001810190506148c6565b5085935050505092915050565b6000604082019050614915600083018561362e565b818103602083015261492781846148a2565b90509392505050565b600080fd5b61493e8261369e565b810181811067ffffffffffffffff8211171561495d5761495c6147e4565b5b80604052505050565b600061497061370a565b905061497c8282614935565b919050565b600067ffffffffffffffff82111561499c5761499b6147e4565b5b602082029050602081019050919050565b600080fd5b60006149c56149c084614981565b614966565b905080838252602082019050602084028301858111156149e8576149e76149ad565b5b835b81811015614a1157806149fd8882614483565b8452602084019350506020810190506149ea565b5050509392505050565b600082601f830112614a3057614a2f614930565b5b8151614a408482602086016149b2565b91505092915050565b600060208284031215614a5f57614a5e613714565b5b600082015167ffffffffffffffff811115614a7d57614a7c613719565b5b614a8984828501614a1b565b91505092915050565b7f53656c6c2065786365656473204d6178205478206c696d697400000000000000600082015250565b6000614ac8601983613663565b9150614ad382614a92565b602082019050919050565b60006020820190508181036000830152614af781614abb565b9050919050565b7f4275792065786365656473204d6178205478206c696d69740000000000000000600082015250565b6000614b34601883613663565b9150614b3f82614afe565b602082019050919050565b60006020820190508181036000830152614b6381614b27565b9050919050565b7f416e74695768616c653a2042616c616e63652065786365656473206d6178205760008201527f616c6c6574206c696d6974000000000000000000000000000000000000000000602082015250565b6000614bc6602b83613663565b9150614bd182614b6a565b604082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b7f41424f4c4953483a204175746f6d61746564206d61726b6574206d616b65722060008201527f7061697220697320616c72656164792073657420746f20746861742076616c7560208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b6000614c7e604183613663565b9150614c8982614bfc565b606082019050919050565b60006020820190508181036000830152614cad81614c71565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602583613663565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614da2602383613663565b9150614dad82614d46565b604082019050919050565b60006020820190508181036000830152614dd181614d95565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e34602683613663565b9150614e3f82614dd8565b604082019050919050565b60006020820190508181036000830152614e6381614e27565b9050919050565b7f7472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b6000614ea0601283613663565b9150614eab82614e6a565b602082019050919050565b60006020820190508181036000830152614ecf81614e93565b9050919050565b6000614ee182613624565b9150614eec83613624565b9250828203905081811115614f0457614f03613cf3565b5b92915050565b6000819050919050565b6000614f2f614f2a614f2584614f0a565b61381e565b613624565b9050919050565b614f3f81614f14565b82525050565b600060a082019050614f5a600083018861362e565b614f676020830187614f36565b8181036040830152614f7981866148a2565b9050614f8860608301856139b3565b614f95608083018461362e565b969550505050505056fea2646970667358221220be53f31525b3927161dbe82d428c60bd7dc9b544133a2558f995d8294397104e64736f6c63430008110033
Deployed Bytecode Sourcemap
34676:10878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35059:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24621:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26788:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39081:182;;;;;;;;;;;;;:::i;:::-;;34753:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25741:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27439:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35020:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25583:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28340:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40261:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34993:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34801:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40956:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40777:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41252:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35511:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25912:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18042:103;;;;;;;;;;;;;:::i;:::-;;39304:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39455:95;;;;;;;;;;;;;:::i;:::-;;35264:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17391:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24840:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39558:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41795:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29058:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26252:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35343:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40512:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35998:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38325:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37686:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26490:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41524:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18300:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38684:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35059:44;;;;:::o;24621:100::-;24675:13;24708:5;24701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24621:100;:::o;26788:169::-;26871:4;26888:39;26897:12;:10;:12::i;:::-;26911:7;26920:6;26888:8;:39::i;:::-;26945:4;26938:11;;26788:169;;;;:::o;39081:182::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39139:9:::1;39153:15;;;;;;;;;;;:20;;39181:21;39153:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39138:69;;;39227:4;39218:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39127:136;39081:182::o:0;34753:41::-;;;;;;;;;;;;;:::o;25741:108::-;25802:7;25829:12;;25822:19;;25741:108;:::o;27439:492::-;27579:4;27596:36;27606:6;27614:9;27625:6;27596:9;:36::i;:::-;27645:24;27672:11;:19;27684:6;27672:19;;;;;;;;;;;;;;;:33;27692:12;:10;:12::i;:::-;27672:33;;;;;;;;;;;;;;;;27645:60;;27744:6;27724:16;:26;;27716:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27831:57;27840:6;27848:12;:10;:12::i;:::-;27881:6;27862:16;:25;27831:8;:57::i;:::-;27919:4;27912:11;;;27439:492;;;;;:::o;35020:22::-;;;;;;;;;;;;;;;;;;:::o;25583:93::-;25641:5;25666:2;25659:9;;25583:93;:::o;28340:215::-;28428:4;28445:80;28454:12;:10;:12::i;:::-;28468:7;28514:10;28477:11;:25;28489:12;:10;:12::i;:::-;28477:25;;;;;;;;;;;;;;;:34;28503:7;28477:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;28445:8;:80::i;:::-;28543:4;28536:11;;28340:215;;;;:::o;40261:238::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40376:7:::1;40354:6;:19;;;:29;;;;;;;;;;;;;;;;;;40417:7;40403:11;;:21;;;;;;;;;;;;;;;;;;40459:2;40444:11;;;;;;;;;;;:17;;;;40436:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40261:238:::0;:::o;34993:20::-;;;;;;;;;;;;;;;;;;:::o;34801:29::-;;;;;;;;;;;;;:::o;40956:201::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41055:1:::1;41036:21;;:7;:21;;::::0;41027:77:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41141:7;41115:15;;:34;;;;;;;;;;;;;;;;;;40956:201:::0;:::o;40777:126::-;40843:4;40867:19;:28;40887:7;40867:28;;;;;;;;;;;;;;;;;;;;;;;;;40860:35;;40777:126;;;:::o;41252:213::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41354:4:::1;41338:13;:11;:13::i;:::-;:20;;;;:::i;:::-;41328:6;:30;;41320:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41453:4;41444:6;:13;;;;:::i;:::-;41426:15;:31;;;;41252:213:::0;:::o;35511:23::-;;;;;;;;;;;;;:::o;25912:127::-;25986:7;26013:9;:18;26023:7;26013:18;;;;;;;;;;;;;;;;26006:25;;25912:127;;;:::o;18042:103::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18107:30:::1;18134:1;18107:18;:30::i;:::-;18042:103::o:0;39304:136::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39424:8:::1;39392:20;:29;39413:7;39392:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;39304:136:::0;;:::o;39455:95::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39529:4:::1;39510:16;;:23;;;;;;;;;;;;;;;;;;39455:95::o:0;35264:50::-;;;;:::o;17391:87::-;17437:7;17464:6;;;;;;;;;;;17457:13;;17391:87;:::o;24840:104::-;24896:13;24929:7;24922:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24840:104;:::o;39558:321::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39702:13:::1;;;;;;;;;;;39694:21;;:4;:21;;::::0;39672:145:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39830:41;39859:4;39865:5;39830:28;:41::i;:::-;39558:321:::0;;:::o;41795:192::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41894:3:::1;41880:11;:17;41871:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41968:11;41951:13;:28;;;;41795:192:::0;:::o;29058:413::-;29151:4;29168:24;29195:11;:25;29207:12;:10;:12::i;:::-;29195:25;;;;;;;;;;;;;;;:34;29221:7;29195:34;;;;;;;;;;;;;;;;29168:61;;29268:15;29248:16;:35;;29240:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29361:67;29370:12;:10;:12::i;:::-;29384:7;29412:15;29393:16;:34;29361:8;:67::i;:::-;29459:4;29452:11;;;29058:413;;;;:::o;26252:175::-;26338:4;26355:42;26365:12;:10;:12::i;:::-;26379:9;26390:6;26355:9;:42::i;:::-;26415:4;26408:11;;26252:175;;;;:::o;35343:52::-;;;;:::o;40512:233::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40629:7:::1;40606;:20;;;:30;;;;;;;;;;;;;;;;;;40663:7;40648:12;;:22;;;;;;;;;;;;;;;;;;40705:2;40689:12;;;;;;;;;;;:18;;;;40681:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40512:233:::0;:::o;35998:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;38325:296::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38450:8:::1;38418:40;;:19;:28;38438:7;38418:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;38410:101:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38553:8;38522:19;:28;38542:7;38522:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38595:7;38579:34;;;38604:8;38579:34;;;;;;:::i;:::-;;;;;;;;38325:296:::0;;:::o;37686:631::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37784:15:::1;;;;;;;;;;;37762:38;;:10;:38;;::::0;37754:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37901:10;37864:15;;:48;;;;;;;;;;;;;;;;;;37924:16;37974:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37956:52;;;38017:4;38037:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37956:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37924:136;;38095:1;38075:22;;:8;:22;;::::0;38071:239:::1;;38159:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38141:55;;;38205:4;38226:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38141:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38112:13;;:137;;;;;;;;;;;;;;;;;;38071:239;;;38290:8;38274:13;;:24;;;;;;;;;;;;;;;;;;38071:239;37747:570;37686:631:::0;:::o;26490:151::-;26579:7;26606:11;:18;26618:5;26606:18;;;;;;;;;;;;;;;:27;26625:7;26606:27;;;;;;;;;;;;;;;;26599:34;;26490:151;;;;:::o;41524:207::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41626:4:::1;41610:13;:11;:13::i;:::-;:20;;;;:::i;:::-;41600:6;:30;;41592:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;41719:4;41710:6;:13;;;;:::i;:::-;41696:11;:27;;;;41524:207:::0;:::o;18300:201::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18409:1:::1;18389:22;;:8;:22;;::::0;18381:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18465:28;18484:8;18465:18;:28::i;:::-;18300:201:::0;:::o;38684:352::-;17622:12;:10;:12::i;:::-;17611:23;;:7;:5;:7::i;:::-;:23;;;17603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38778:4:::1;38760:23;;:6;:23;;::::0;38756:273:::1;;38799:43;38808:7;:5;:7::i;:::-;38817:24;38835:4;38817:9;:24::i;:::-;38799:8;:43::i;:::-;;38756:273;;;38871:17;38898:6;38871:34;;38916:15;38934:10;:20;;;38963:4;38934:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38916:53;;38980:10;:19;;;39000:7;:5;:7::i;:::-;39009;38980:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38860:169;;38756:273;38684:352:::0;:::o;16111:98::-;16164:7;16191:10;16184:17;;16111:98;:::o;32772:380::-;32925:1;32908:19;;:5;:19;;;32900:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33006:1;32987:21;;:7;:21;;;32979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33090:6;33060:11;:18;33072:5;33060:18;;;;;;;;;;;;;;;:27;33079:7;33060:27;;;;;;;;;;;;;;;:36;;;;33128:7;33112:32;;33121:5;33112:32;;;33137:6;33112:32;;;;;;:::i;:::-;;;;;;;;32772:380;;;:::o;41995:2694::-;42143:1;42127:18;;:4;:18;;;42119:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42219:1;42205:16;;:2;:16;;;42197:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42289:16;;;;;;;;;;;:45;;;;42309:19;:25;42329:4;42309:25;;;;;;;;;;;;;;;;;;;;;;;;;42289:45;42280:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;42412:1;42402:6;:11;42398:93;;42430:28;42446:4;42452:2;42456:1;42430:15;:28::i;:::-;42473:7;;42398:93;42503:25;42545:1;42531:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42503:44;;42580:4;42558:8;42567:1;42558:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;42610:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42596:8;42605:1;42596:11;;;;;;;;:::i;:::-;;;;;;;:36;;;;;;;;;;;42645:16;42705:1;42678:24;42696:4;42678:9;:24::i;:::-;:28;42674:137;;;42731:15;;;;;;;;;;;:29;;;42761:24;42779:4;42761:9;:24::i;:::-;42787:8;42731:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42797:1;42731:68;;;;;;;;:::i;:::-;;;;;;;;42720:79;;42674:137;42821:28;42852:24;42870:4;42852:9;:24::i;:::-;42821:55;;42887:28;42943:13;;42918:8;:38;;42887:69;;42987:11;;;;;;;;;;;:37;;;;;43016:8;;;;;;;;;;;43015:9;42987:37;:75;;;;;43049:13;;;;;;;;;;;43041:21;;:4;:21;;;;42987:75;:115;;;;;43079:23;42987:115;42969:278;;;43143:18;43164:20;43143:41;;43199:34;43222:10;43199:22;:34::i;:::-;43114:133;42969:278;43259:12;43274:4;43259:19;;43380;:25;43400:4;43380:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43409:19;:23;43429:2;43409:23;;;;;;;;;;;;;;;;;;;;;;;;;43380:52;43376:100;;;43459:5;43449:15;;43376:100;43492:7;43488:1148;;;43516:12;43559:25;:29;43585:2;43559:29;;;;;;;;;;;;;;;;;;;;;;;;;43555:220;;;43616:12;;;;;;;;;;;43609:19;;;;43555:220;;;43671:25;:31;43697:4;43671:31;;;;;;;;;;;;;;;;;;;;;;;;;43667:108;;;43730:11;;;;;;;;;;;43723:18;;;;43667:108;43555:220;43796:20;:26;43817:4;43796:26;;;;;;;;;;;;;;;;;;;;;;;;;43795:27;:56;;;;;43827:20;:24;43848:2;43827:24;;;;;;;;;;;;;;;;;;;;;;;;;43826:25;43795:56;43791:665;;;43876:25;:29;43902:2;43876:29;;;;;;;;;;;;;;;;;;;;;;;;;43872:300;;;43948:11;;43938:6;:21;;43930:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43872:300;;;44019:25;:31;44045:4;44019:31;;;;;;;;;;;;;;;;;;;;;;;;;44015:157;;;44091:11;;44081:6;:21;;44073:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44015:157;43872:300;44197:25;:29;44223:2;44197:29;;;;;;;;;;;;;;;;;;;;;;;;;44192:249;;44311:15;;44301:6;44285:13;44295:2;44285:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;44251:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44192:249;43791:665;44472:17;44492:25;44513:3;44492:16;44503:4;44492:6;:10;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;44472:45;;44541:21;44552:9;44541:6;:10;;:21;;;;:::i;:::-;44532:30;;44577:47;44593:4;44607;44614:9;44577:15;:47::i;:::-;43501:1135;;43488:1148;44648:33;44664:4;44670:2;44674:6;44648:15;:33::i;:::-;42108:2581;;;;;41995:2694;;;;:::o;18661:191::-;18735:16;18754:6;;;;;;;;;;;18735:25;;18780:8;18771:6;;:17;;;;;;;;;;;;;;;;;;18835:8;18804:40;;18825:8;18804:40;;;;;;;;;;;;18724:128;18661:191;:::o;39887:354::-;40027:5;39992:40;;:25;:31;40018:4;39992:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;39970:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;40170:5;40136:25;:31;40162:4;40136:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40227:5;40193:40;;40221:4;40193:40;;;;;;;;;;;;39887:354;;:::o;29961:763::-;30119:1;30101:20;;:6;:20;;;30093:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30203:1;30182:23;;:9;:23;;;30174:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30258:47;30279:6;30287:9;30298:6;30258:20;:47::i;:::-;30318:21;30342:9;:17;30352:6;30342:17;;;;;;;;;;;;;;;;30318:41;;30395:6;30378:13;:23;;30370:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30516:6;30500:13;:22;30480:9;:17;30490:6;30480:17;;;;;;;;;;;;;;;:42;;;;30568:6;30544:9;:20;30554:9;30544:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;30600:1;30591:6;:10;30587:71;;;30638:9;30621:35;;30630:6;30621:35;;;30649:6;30621:35;;;;;;:::i;:::-;;;;;;;;30587:71;30670:46;30690:6;30698:9;30709:6;30670:19;:46::i;:::-;30082:642;29961:763;;;:::o;44697:244::-;36395:4;36384:8;;:15;;;;;;;;;;;;;;;;;;44777:24:::1;44794:6;44777:16;:24::i;:::-;44813:7;44834:15;;;;;;;;;;;44826:29;;44863:21;44826:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44812:77;;;44907:2;44899:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;44766:175;36433:5:::0;36422:8;;:16;;;;;;;;;;;;;;;;;;44697:244;:::o;12005:98::-;12063:7;12094:1;12090;:5;;;;:::i;:::-;12083:12;;12005:98;;;;:::o;12404:::-;12462:7;12493:1;12489;:5;;;;:::i;:::-;12482:12;;12404:98;;;;:::o;11648:::-;11706:7;11737:1;11733;:5;;;;:::i;:::-;11726:12;;11648:98;;;;:::o;33752:125::-;;;;:::o;34481:124::-;;;;:::o;44954:589::-;45080:21;45118:1;45104:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45080:40;;45149:4;45131;45136:1;45131:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45175:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45165:4;45170:1;45165:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45210:62;45227:4;45242:15;;;;;;;;;;;45260:11;45210:8;:62::i;:::-;45311:15;;;;;;;;;;;:66;;;45392:11;45418:1;45462:4;45489;45509:15;45311:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45009:534;44954:589;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:89::-;5432:7;5472:6;5465:5;5461:18;5450:29;;5396:89;;;:::o;5491:115::-;5576:23;5593:5;5576:23;:::i;:::-;5571:3;5564:36;5491:115;;:::o;5612:218::-;5703:4;5741:2;5730:9;5726:18;5718:26;;5754:69;5820:1;5809:9;5805:17;5796:6;5754:69;:::i;:::-;5612:218;;;;:::o;5836:86::-;5871:7;5911:4;5904:5;5900:16;5889:27;;5836:86;;;:::o;5928:112::-;6011:22;6027:5;6011:22;:::i;:::-;6006:3;5999:35;5928:112;;:::o;6046:214::-;6135:4;6173:2;6162:9;6158:18;6150:26;;6186:67;6250:1;6239:9;6235:17;6226:6;6186:67;:::i;:::-;6046:214;;;;:::o;6266:120::-;6338:23;6355:5;6338:23;:::i;:::-;6331:5;6328:34;6318:62;;6376:1;6373;6366:12;6318:62;6266:120;:::o;6392:137::-;6437:5;6475:6;6462:20;6453:29;;6491:32;6517:5;6491:32;:::i;:::-;6392:137;;;;:::o;6535:327::-;6593:6;6642:2;6630:9;6621:7;6617:23;6613:32;6610:119;;;6648:79;;:::i;:::-;6610:119;6768:1;6793:52;6837:7;6828:6;6817:9;6813:22;6793:52;:::i;:::-;6783:62;;6739:116;6535:327;;;;:::o;6868:118::-;6955:24;6973:5;6955:24;:::i;:::-;6950:3;6943:37;6868:118;;:::o;6992:222::-;7085:4;7123:2;7112:9;7108:18;7100:26;;7136:71;7204:1;7193:9;7189:17;7180:6;7136:71;:::i;:::-;6992:222;;;;:::o;7220:329::-;7279:6;7328:2;7316:9;7307:7;7303:23;7299:32;7296:119;;;7334:79;;:::i;:::-;7296:119;7454:1;7479:53;7524:7;7515:6;7504:9;7500:22;7479:53;:::i;:::-;7469:63;;7425:117;7220:329;;;;:::o;7555:::-;7614:6;7663:2;7651:9;7642:7;7638:23;7634:32;7631:119;;;7669:79;;:::i;:::-;7631:119;7789:1;7814:53;7859:7;7850:6;7839:9;7835:22;7814:53;:::i;:::-;7804:63;;7760:117;7555:329;;;;:::o;7890:116::-;7960:21;7975:5;7960:21;:::i;:::-;7953:5;7950:32;7940:60;;7996:1;7993;7986:12;7940:60;7890:116;:::o;8012:133::-;8055:5;8093:6;8080:20;8071:29;;8109:30;8133:5;8109:30;:::i;:::-;8012:133;;;;:::o;8151:468::-;8216:6;8224;8273:2;8261:9;8252:7;8248:23;8244:32;8241:119;;;8279:79;;:::i;:::-;8241:119;8399:1;8424:53;8469:7;8460:6;8449:9;8445:22;8424:53;:::i;:::-;8414:63;;8370:117;8526:2;8552:50;8594:7;8585:6;8574:9;8570:22;8552:50;:::i;:::-;8542:60;;8497:115;8151:468;;;;;:::o;8625:474::-;8693:6;8701;8750:2;8738:9;8729:7;8725:23;8721:32;8718:119;;;8756:79;;:::i;:::-;8718:119;8876:1;8901:53;8946:7;8937:6;8926:9;8922:22;8901:53;:::i;:::-;8891:63;;8847:117;9003:2;9029:53;9074:7;9065:6;9054:9;9050:22;9029:53;:::i;:::-;9019:63;;8974:118;8625:474;;;;;:::o;9105:180::-;9153:77;9150:1;9143:88;9250:4;9247:1;9240:15;9274:4;9271:1;9264:15;9291:320;9335:6;9372:1;9366:4;9362:12;9352:22;;9419:1;9413:4;9409:12;9440:18;9430:81;;9496:4;9488:6;9484:17;9474:27;;9430:81;9558:2;9550:6;9547:14;9527:18;9524:38;9521:84;;9577:18;;:::i;:::-;9521:84;9342:269;9291:320;;;:::o;9617:182::-;9757:34;9753:1;9745:6;9741:14;9734:58;9617:182;:::o;9805:366::-;9947:3;9968:67;10032:2;10027:3;9968:67;:::i;:::-;9961:74;;10044:93;10133:3;10044:93;:::i;:::-;10162:2;10157:3;10153:12;10146:19;;9805:366;;;:::o;10177:419::-;10343:4;10381:2;10370:9;10366:18;10358:26;;10430:9;10424:4;10420:20;10416:1;10405:9;10401:17;10394:47;10458:131;10584:4;10458:131;:::i;:::-;10450:139;;10177:419;;;:::o;10602:147::-;10703:11;10740:3;10725:18;;10602:147;;;;:::o;10755:114::-;;:::o;10875:398::-;11034:3;11055:83;11136:1;11131:3;11055:83;:::i;:::-;11048:90;;11147:93;11236:3;11147:93;:::i;:::-;11265:1;11260:3;11256:11;11249:18;;10875:398;;;:::o;11279:379::-;11463:3;11485:147;11628:3;11485:147;:::i;:::-;11478:154;;11649:3;11642:10;;11279:379;;;:::o;11664:169::-;11804:21;11800:1;11792:6;11788:14;11781:45;11664:169;:::o;11839:366::-;11981:3;12002:67;12066:2;12061:3;12002:67;:::i;:::-;11995:74;;12078:93;12167:3;12078:93;:::i;:::-;12196:2;12191:3;12187:12;12180:19;;11839:366;;;:::o;12211:419::-;12377:4;12415:2;12404:9;12400:18;12392:26;;12464:9;12458:4;12454:20;12450:1;12439:9;12435:17;12428:47;12492:131;12618:4;12492:131;:::i;:::-;12484:139;;12211:419;;;:::o;12636:227::-;12776:34;12772:1;12764:6;12760:14;12753:58;12845:10;12840:2;12832:6;12828:15;12821:35;12636:227;:::o;12869:366::-;13011:3;13032:67;13096:2;13091:3;13032:67;:::i;:::-;13025:74;;13108:93;13197:3;13108:93;:::i;:::-;13226:2;13221:3;13217:12;13210:19;;12869:366;;;:::o;13241:419::-;13407:4;13445:2;13434:9;13430:18;13422:26;;13494:9;13488:4;13484:20;13480:1;13469:9;13465:17;13458:47;13522:131;13648:4;13522:131;:::i;:::-;13514:139;;13241:419;;;:::o;13666:180::-;13714:77;13711:1;13704:88;13811:4;13808:1;13801:15;13835:4;13832:1;13825:15;13852:191;13892:3;13911:20;13929:1;13911:20;:::i;:::-;13906:25;;13945:20;13963:1;13945:20;:::i;:::-;13940:25;;13988:1;13985;13981:9;13974:16;;14009:3;14006:1;14003:10;14000:36;;;14016:18;;:::i;:::-;14000:36;13852:191;;;;:::o;14049:176::-;14189:28;14185:1;14177:6;14173:14;14166:52;14049:176;:::o;14231:366::-;14373:3;14394:67;14458:2;14453:3;14394:67;:::i;:::-;14387:74;;14470:93;14559:3;14470:93;:::i;:::-;14588:2;14583:3;14579:12;14572:19;;14231:366;;;:::o;14603:419::-;14769:4;14807:2;14796:9;14792:18;14784:26;;14856:9;14850:4;14846:20;14842:1;14831:9;14827:17;14820:47;14884:131;15010:4;14884:131;:::i;:::-;14876:139;;14603:419;;;:::o;15028:229::-;15168:34;15164:1;15156:6;15152:14;15145:58;15237:12;15232:2;15224:6;15220:15;15213:37;15028:229;:::o;15263:366::-;15405:3;15426:67;15490:2;15485:3;15426:67;:::i;:::-;15419:74;;15502:93;15591:3;15502:93;:::i;:::-;15620:2;15615:3;15611:12;15604:19;;15263:366;;;:::o;15635:419::-;15801:4;15839:2;15828:9;15824:18;15816:26;;15888:9;15882:4;15878:20;15874:1;15863:9;15859:17;15852:47;15916:131;16042:4;15916:131;:::i;:::-;15908:139;;15635:419;;;:::o;16060:180::-;16108:77;16105:1;16098:88;16205:4;16202:1;16195:15;16229:4;16226:1;16219:15;16246:185;16286:1;16303:20;16321:1;16303:20;:::i;:::-;16298:25;;16337:20;16355:1;16337:20;:::i;:::-;16332:25;;16376:1;16366:35;;16381:18;;:::i;:::-;16366:35;16423:1;16420;16416:9;16411:14;;16246:185;;;;:::o;16437:239::-;16577:34;16573:1;16565:6;16561:14;16554:58;16646:22;16641:2;16633:6;16629:15;16622:47;16437:239;:::o;16682:366::-;16824:3;16845:67;16909:2;16904:3;16845:67;:::i;:::-;16838:74;;16921:93;17010:3;16921:93;:::i;:::-;17039:2;17034:3;17030:12;17023:19;;16682:366;;;:::o;17054:419::-;17220:4;17258:2;17247:9;17243:18;17235:26;;17307:9;17301:4;17297:20;17293:1;17282:9;17278:17;17271:47;17335:131;17461:4;17335:131;:::i;:::-;17327:139;;17054:419;;;:::o;17479:410::-;17519:7;17542:20;17560:1;17542:20;:::i;:::-;17537:25;;17576:20;17594:1;17576:20;:::i;:::-;17571:25;;17631:1;17628;17624:9;17653:30;17671:11;17653:30;:::i;:::-;17642:41;;17832:1;17823:7;17819:15;17816:1;17813:22;17793:1;17786:9;17766:83;17743:139;;17862:18;;:::i;:::-;17743:139;17527:362;17479:410;;;;:::o;17895:298::-;18035:34;18031:1;18023:6;18019:14;18012:58;18104:34;18099:2;18091:6;18087:15;18080:59;18173:12;18168:2;18160:6;18156:15;18149:37;17895:298;:::o;18199:366::-;18341:3;18362:67;18426:2;18421:3;18362:67;:::i;:::-;18355:74;;18438:93;18527:3;18438:93;:::i;:::-;18556:2;18551:3;18547:12;18540:19;;18199:366;;;:::o;18571:419::-;18737:4;18775:2;18764:9;18760:18;18752:26;;18824:9;18818:4;18814:20;18810:1;18799:9;18795:17;18788:47;18852:131;18978:4;18852:131;:::i;:::-;18844:139;;18571:419;;;:::o;18996:226::-;19136:34;19132:1;19124:6;19120:14;19113:58;19205:9;19200:2;19192:6;19188:15;19181:34;18996:226;:::o;19228:366::-;19370:3;19391:67;19455:2;19450:3;19391:67;:::i;:::-;19384:74;;19467:93;19556:3;19467:93;:::i;:::-;19585:2;19580:3;19576:12;19569:19;;19228:366;;;:::o;19600:419::-;19766:4;19804:2;19793:9;19789:18;19781:26;;19853:9;19847:4;19843:20;19839:1;19828:9;19824:17;19817:47;19881:131;20007:4;19881:131;:::i;:::-;19873:139;;19600:419;;;:::o;20025:224::-;20165:34;20161:1;20153:6;20149:14;20142:58;20234:7;20229:2;20221:6;20217:15;20210:32;20025:224;:::o;20255:366::-;20397:3;20418:67;20482:2;20477:3;20418:67;:::i;:::-;20411:74;;20494:93;20583:3;20494:93;:::i;:::-;20612:2;20607:3;20603:12;20596:19;;20255:366;;;:::o;20627:419::-;20793:4;20831:2;20820:9;20816:18;20808:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20908:131;21034:4;20908:131;:::i;:::-;20900:139;;20627:419;;;:::o;21052:176::-;21192:28;21188:1;21180:6;21176:14;21169:52;21052:176;:::o;21234:366::-;21376:3;21397:67;21461:2;21456:3;21397:67;:::i;:::-;21390:74;;21473:93;21562:3;21473:93;:::i;:::-;21591:2;21586:3;21582:12;21575:19;;21234:366;;;:::o;21606:419::-;21772:4;21810:2;21799:9;21795:18;21787:26;;21859:9;21853:4;21849:20;21845:1;21834:9;21830:17;21823:47;21887:131;22013:4;21887:131;:::i;:::-;21879:139;;21606:419;;;:::o;22031:236::-;22171:34;22167:1;22159:6;22155:14;22148:58;22240:19;22235:2;22227:6;22223:15;22216:44;22031:236;:::o;22273:366::-;22415:3;22436:67;22500:2;22495:3;22436:67;:::i;:::-;22429:74;;22512:93;22601:3;22512:93;:::i;:::-;22630:2;22625:3;22621:12;22614:19;;22273:366;;;:::o;22645:419::-;22811:4;22849:2;22838:9;22834:18;22826:26;;22898:9;22892:4;22888:20;22884:1;22873:9;22869:17;22862:47;22926:131;23052:4;22926:131;:::i;:::-;22918:139;;22645:419;;;:::o;23070:231::-;23210:34;23206:1;23198:6;23194:14;23187:58;23279:14;23274:2;23266:6;23262:15;23255:39;23070:231;:::o;23307:366::-;23449:3;23470:67;23534:2;23529:3;23470:67;:::i;:::-;23463:74;;23546:93;23635:3;23546:93;:::i;:::-;23664:2;23659:3;23655:12;23648:19;;23307:366;;;:::o;23679:419::-;23845:4;23883:2;23872:9;23868:18;23860:26;;23932:9;23926:4;23922:20;23918:1;23907:9;23903:17;23896:47;23960:131;24086:4;23960:131;:::i;:::-;23952:139;;23679:419;;;:::o;24104:143::-;24161:5;24192:6;24186:13;24177:22;;24208:33;24235:5;24208:33;:::i;:::-;24104:143;;;;:::o;24253:351::-;24323:6;24372:2;24360:9;24351:7;24347:23;24343:32;24340:119;;;24378:79;;:::i;:::-;24340:119;24498:1;24523:64;24579:7;24570:6;24559:9;24555:22;24523:64;:::i;:::-;24513:74;;24469:128;24253:351;;;;:::o;24610:332::-;24731:4;24769:2;24758:9;24754:18;24746:26;;24782:71;24850:1;24839:9;24835:17;24826:6;24782:71;:::i;:::-;24863:72;24931:2;24920:9;24916:18;24907:6;24863:72;:::i;:::-;24610:332;;;;;:::o;24948:237::-;25088:34;25084:1;25076:6;25072:14;25065:58;25157:20;25152:2;25144:6;25140:15;25133:45;24948:237;:::o;25191:366::-;25333:3;25354:67;25418:2;25413:3;25354:67;:::i;:::-;25347:74;;25430:93;25519:3;25430:93;:::i;:::-;25548:2;25543:3;25539:12;25532:19;;25191:366;;;:::o;25563:419::-;25729:4;25767:2;25756:9;25752:18;25744:26;;25816:9;25810:4;25806:20;25802:1;25791:9;25787:17;25780:47;25844:131;25970:4;25844:131;:::i;:::-;25836:139;;25563:419;;;:::o;25988:225::-;26128:34;26124:1;26116:6;26112:14;26105:58;26197:8;26192:2;26184:6;26180:15;26173:33;25988:225;:::o;26219:366::-;26361:3;26382:67;26446:2;26441:3;26382:67;:::i;:::-;26375:74;;26458:93;26547:3;26458:93;:::i;:::-;26576:2;26571:3;26567:12;26560:19;;26219:366;;;:::o;26591:419::-;26757:4;26795:2;26784:9;26780:18;26772:26;;26844:9;26838:4;26834:20;26830:1;26819:9;26815:17;26808:47;26872:131;26998:4;26872:131;:::i;:::-;26864:139;;26591:419;;;:::o;27016:143::-;27073:5;27104:6;27098:13;27089:22;;27120:33;27147:5;27120:33;:::i;:::-;27016:143;;;;:::o;27165:351::-;27235:6;27284:2;27272:9;27263:7;27259:23;27255:32;27252:119;;;27290:79;;:::i;:::-;27252:119;27410:1;27435:64;27491:7;27482:6;27471:9;27467:22;27435:64;:::i;:::-;27425:74;;27381:128;27165:351;;;;:::o;27522:332::-;27643:4;27681:2;27670:9;27666:18;27658:26;;27694:71;27762:1;27751:9;27747:17;27738:6;27694:71;:::i;:::-;27775:72;27843:2;27832:9;27828:18;27819:6;27775:72;:::i;:::-;27522:332;;;;;:::o;27860:137::-;27914:5;27945:6;27939:13;27930:22;;27961:30;27985:5;27961:30;:::i;:::-;27860:137;;;;:::o;28003:345::-;28070:6;28119:2;28107:9;28098:7;28094:23;28090:32;28087:119;;;28125:79;;:::i;:::-;28087:119;28245:1;28270:61;28323:7;28314:6;28303:9;28299:22;28270:61;:::i;:::-;28260:71;;28216:125;28003:345;;;;:::o;28354:223::-;28494:34;28490:1;28482:6;28478:14;28471:58;28563:6;28558:2;28550:6;28546:15;28539:31;28354:223;:::o;28583:366::-;28725:3;28746:67;28810:2;28805:3;28746:67;:::i;:::-;28739:74;;28822:93;28911:3;28822:93;:::i;:::-;28940:2;28935:3;28931:12;28924:19;;28583:366;;;:::o;28955:419::-;29121:4;29159:2;29148:9;29144:18;29136:26;;29208:9;29202:4;29198:20;29194:1;29183:9;29179:17;29172:47;29236:131;29362:4;29236:131;:::i;:::-;29228:139;;28955:419;;;:::o;29380:221::-;29520:34;29516:1;29508:6;29504:14;29497:58;29589:4;29584:2;29576:6;29572:15;29565:29;29380:221;:::o;29607:366::-;29749:3;29770:67;29834:2;29829:3;29770:67;:::i;:::-;29763:74;;29846:93;29935:3;29846:93;:::i;:::-;29964:2;29959:3;29955:12;29948:19;;29607:366;;;:::o;29979:419::-;30145:4;30183:2;30172:9;30168:18;30160:26;;30232:9;30226:4;30222:20;30218:1;30207:9;30203:17;30196:47;30260:131;30386:4;30260:131;:::i;:::-;30252:139;;29979:419;;;:::o;30404:223::-;30544:34;30540:1;30532:6;30528:14;30521:58;30613:6;30608:2;30600:6;30596:15;30589:31;30404:223;:::o;30633:366::-;30775:3;30796:67;30860:2;30855:3;30796:67;:::i;:::-;30789:74;;30872:93;30961:3;30872:93;:::i;:::-;30990:2;30985:3;30981:12;30974:19;;30633:366;;;:::o;31005:419::-;31171:4;31209:2;31198:9;31194:18;31186:26;;31258:9;31252:4;31248:20;31244:1;31233:9;31229:17;31222:47;31286:131;31412:4;31286:131;:::i;:::-;31278:139;;31005:419;;;:::o;31430:221::-;31570:34;31566:1;31558:6;31554:14;31547:58;31639:4;31634:2;31626:6;31622:15;31615:29;31430:221;:::o;31657:366::-;31799:3;31820:67;31884:2;31879:3;31820:67;:::i;:::-;31813:74;;31896:93;31985:3;31896:93;:::i;:::-;32014:2;32009:3;32005:12;31998:19;;31657:366;;;:::o;32029:419::-;32195:4;32233:2;32222:9;32218:18;32210:26;;32282:9;32276:4;32272:20;32268:1;32257:9;32253:17;32246:47;32310:131;32436:4;32310:131;:::i;:::-;32302:139;;32029:419;;;:::o;32454:173::-;32594:25;32590:1;32582:6;32578:14;32571:49;32454:173;:::o;32633:366::-;32775:3;32796:67;32860:2;32855:3;32796:67;:::i;:::-;32789:74;;32872:93;32961:3;32872:93;:::i;:::-;32990:2;32985:3;32981:12;32974:19;;32633:366;;;:::o;33005:419::-;33171:4;33209:2;33198:9;33194:18;33186:26;;33258:9;33252:4;33248:20;33244:1;33233:9;33229:17;33222:47;33286:131;33412:4;33286:131;:::i;:::-;33278:139;;33005:419;;;:::o;33430:180::-;33478:77;33475:1;33468:88;33575:4;33572:1;33565:15;33599:4;33596:1;33589:15;33616:180;33664:77;33661:1;33654:88;33761:4;33758:1;33751:15;33785:4;33782:1;33775:15;33802:114;33869:6;33903:5;33897:12;33887:22;;33802:114;;;:::o;33922:184::-;34021:11;34055:6;34050:3;34043:19;34095:4;34090:3;34086:14;34071:29;;33922:184;;;;:::o;34112:132::-;34179:4;34202:3;34194:11;;34232:4;34227:3;34223:14;34215:22;;34112:132;;;:::o;34250:108::-;34327:24;34345:5;34327:24;:::i;:::-;34322:3;34315:37;34250:108;;:::o;34364:179::-;34433:10;34454:46;34496:3;34488:6;34454:46;:::i;:::-;34532:4;34527:3;34523:14;34509:28;;34364:179;;;;:::o;34549:113::-;34619:4;34651;34646:3;34642:14;34634:22;;34549:113;;;:::o;34698:732::-;34817:3;34846:54;34894:5;34846:54;:::i;:::-;34916:86;34995:6;34990:3;34916:86;:::i;:::-;34909:93;;35026:56;35076:5;35026:56;:::i;:::-;35105:7;35136:1;35121:284;35146:6;35143:1;35140:13;35121:284;;;35222:6;35216:13;35249:63;35308:3;35293:13;35249:63;:::i;:::-;35242:70;;35335:60;35388:6;35335:60;:::i;:::-;35325:70;;35181:224;35168:1;35165;35161:9;35156:14;;35121:284;;;35125:14;35421:3;35414:10;;34822:608;;;34698:732;;;;:::o;35436:483::-;35607:4;35645:2;35634:9;35630:18;35622:26;;35658:71;35726:1;35715:9;35711:17;35702:6;35658:71;:::i;:::-;35776:9;35770:4;35766:20;35761:2;35750:9;35746:18;35739:48;35804:108;35907:4;35898:6;35804:108;:::i;:::-;35796:116;;35436:483;;;;;:::o;35925:117::-;36034:1;36031;36024:12;36048:281;36131:27;36153:4;36131:27;:::i;:::-;36123:6;36119:40;36261:6;36249:10;36246:22;36225:18;36213:10;36210:34;36207:62;36204:88;;;36272:18;;:::i;:::-;36204:88;36312:10;36308:2;36301:22;36091:238;36048:281;;:::o;36335:129::-;36369:6;36396:20;;:::i;:::-;36386:30;;36425:33;36453:4;36445:6;36425:33;:::i;:::-;36335:129;;;:::o;36470:311::-;36547:4;36637:18;36629:6;36626:30;36623:56;;;36659:18;;:::i;:::-;36623:56;36709:4;36701:6;36697:17;36689:25;;36769:4;36763;36759:15;36751:23;;36470:311;;;:::o;36787:117::-;36896:1;36893;36886:12;36927:732;37034:5;37059:81;37075:64;37132:6;37075:64;:::i;:::-;37059:81;:::i;:::-;37050:90;;37160:5;37189:6;37182:5;37175:21;37223:4;37216:5;37212:16;37205:23;;37276:4;37268:6;37264:17;37256:6;37252:30;37305:3;37297:6;37294:15;37291:122;;;37324:79;;:::i;:::-;37291:122;37439:6;37422:231;37456:6;37451:3;37448:15;37422:231;;;37531:3;37560:48;37604:3;37592:10;37560:48;:::i;:::-;37555:3;37548:61;37638:4;37633:3;37629:14;37622:21;;37498:155;37482:4;37477:3;37473:14;37466:21;;37422:231;;;37426:21;37040:619;;36927:732;;;;;:::o;37682:385::-;37764:5;37813:3;37806:4;37798:6;37794:17;37790:27;37780:122;;37821:79;;:::i;:::-;37780:122;37931:6;37925:13;37956:105;38057:3;38049:6;38042:4;38034:6;38030:17;37956:105;:::i;:::-;37947:114;;37770:297;37682:385;;;;:::o;38073:554::-;38168:6;38217:2;38205:9;38196:7;38192:23;38188:32;38185:119;;;38223:79;;:::i;:::-;38185:119;38364:1;38353:9;38349:17;38343:24;38394:18;38386:6;38383:30;38380:117;;;38416:79;;:::i;:::-;38380:117;38521:89;38602:7;38593:6;38582:9;38578:22;38521:89;:::i;:::-;38511:99;;38314:306;38073:554;;;;:::o;38633:175::-;38773:27;38769:1;38761:6;38757:14;38750:51;38633:175;:::o;38814:366::-;38956:3;38977:67;39041:2;39036:3;38977:67;:::i;:::-;38970:74;;39053:93;39142:3;39053:93;:::i;:::-;39171:2;39166:3;39162:12;39155:19;;38814:366;;;:::o;39186:419::-;39352:4;39390:2;39379:9;39375:18;39367:26;;39439:9;39433:4;39429:20;39425:1;39414:9;39410:17;39403:47;39467:131;39593:4;39467:131;:::i;:::-;39459:139;;39186:419;;;:::o;39611:174::-;39751:26;39747:1;39739:6;39735:14;39728:50;39611:174;:::o;39791:366::-;39933:3;39954:67;40018:2;40013:3;39954:67;:::i;:::-;39947:74;;40030:93;40119:3;40030:93;:::i;:::-;40148:2;40143:3;40139:12;40132:19;;39791:366;;;:::o;40163:419::-;40329:4;40367:2;40356:9;40352:18;40344:26;;40416:9;40410:4;40406:20;40402:1;40391:9;40387:17;40380:47;40444:131;40570:4;40444:131;:::i;:::-;40436:139;;40163:419;;;:::o;40588:230::-;40728:34;40724:1;40716:6;40712:14;40705:58;40797:13;40792:2;40784:6;40780:15;40773:38;40588:230;:::o;40824:366::-;40966:3;40987:67;41051:2;41046:3;40987:67;:::i;:::-;40980:74;;41063:93;41152:3;41063:93;:::i;:::-;41181:2;41176:3;41172:12;41165:19;;40824:366;;;:::o;41196:419::-;41362:4;41400:2;41389:9;41385:18;41377:26;;41449:9;41443:4;41439:20;41435:1;41424:9;41420:17;41413:47;41477:131;41603:4;41477:131;:::i;:::-;41469:139;;41196:419;;;:::o;41621:289::-;41761:34;41757:1;41749:6;41745:14;41738:58;41830:34;41825:2;41817:6;41813:15;41806:59;41899:3;41894:2;41886:6;41882:15;41875:28;41621:289;:::o;41916:366::-;42058:3;42079:67;42143:2;42138:3;42079:67;:::i;:::-;42072:74;;42155:93;42244:3;42155:93;:::i;:::-;42273:2;42268:3;42264:12;42257:19;;41916:366;;;:::o;42288:419::-;42454:4;42492:2;42481:9;42477:18;42469:26;;42541:9;42535:4;42531:20;42527:1;42516:9;42512:17;42505:47;42569:131;42695:4;42569:131;:::i;:::-;42561:139;;42288:419;;;:::o;42713:224::-;42853:34;42849:1;42841:6;42837:14;42830:58;42922:7;42917:2;42909:6;42905:15;42898:32;42713:224;:::o;42943:366::-;43085:3;43106:67;43170:2;43165:3;43106:67;:::i;:::-;43099:74;;43182:93;43271:3;43182:93;:::i;:::-;43300:2;43295:3;43291:12;43284:19;;42943:366;;;:::o;43315:419::-;43481:4;43519:2;43508:9;43504:18;43496:26;;43568:9;43562:4;43558:20;43554:1;43543:9;43539:17;43532:47;43596:131;43722:4;43596:131;:::i;:::-;43588:139;;43315:419;;;:::o;43740:222::-;43880:34;43876:1;43868:6;43864:14;43857:58;43949:5;43944:2;43936:6;43932:15;43925:30;43740:222;:::o;43968:366::-;44110:3;44131:67;44195:2;44190:3;44131:67;:::i;:::-;44124:74;;44207:93;44296:3;44207:93;:::i;:::-;44325:2;44320:3;44316:12;44309:19;;43968:366;;;:::o;44340:419::-;44506:4;44544:2;44533:9;44529:18;44521:26;;44593:9;44587:4;44583:20;44579:1;44568:9;44564:17;44557:47;44621:131;44747:4;44621:131;:::i;:::-;44613:139;;44340:419;;;:::o;44765:225::-;44905:34;44901:1;44893:6;44889:14;44882:58;44974:8;44969:2;44961:6;44957:15;44950:33;44765:225;:::o;44996:366::-;45138:3;45159:67;45223:2;45218:3;45159:67;:::i;:::-;45152:74;;45235:93;45324:3;45235:93;:::i;:::-;45353:2;45348:3;45344:12;45337:19;;44996:366;;;:::o;45368:419::-;45534:4;45572:2;45561:9;45557:18;45549:26;;45621:9;45615:4;45611:20;45607:1;45596:9;45592:17;45585:47;45649:131;45775:4;45649:131;:::i;:::-;45641:139;;45368:419;;;:::o;45793:168::-;45933:20;45929:1;45921:6;45917:14;45910:44;45793:168;:::o;45967:366::-;46109:3;46130:67;46194:2;46189:3;46130:67;:::i;:::-;46123:74;;46206:93;46295:3;46206:93;:::i;:::-;46324:2;46319:3;46315:12;46308:19;;45967:366;;;:::o;46339:419::-;46505:4;46543:2;46532:9;46528:18;46520:26;;46592:9;46586:4;46582:20;46578:1;46567:9;46563:17;46556:47;46620:131;46746:4;46620:131;:::i;:::-;46612:139;;46339:419;;;:::o;46764:194::-;46804:4;46824:20;46842:1;46824:20;:::i;:::-;46819:25;;46858:20;46876:1;46858:20;:::i;:::-;46853:25;;46902:1;46899;46895:9;46887:17;;46926:1;46920:4;46917:11;46914:37;;;46931:18;;:::i;:::-;46914:37;46764:194;;;;:::o;46964:85::-;47009:7;47038:5;47027:16;;46964:85;;;:::o;47055:158::-;47113:9;47146:61;47164:42;47173:32;47199:5;47173:32;:::i;:::-;47164:42;:::i;:::-;47146:61;:::i;:::-;47133:74;;47055:158;;;:::o;47219:147::-;47314:45;47353:5;47314:45;:::i;:::-;47309:3;47302:58;47219:147;;:::o;47372:831::-;47635:4;47673:3;47662:9;47658:19;47650:27;;47687:71;47755:1;47744:9;47740:17;47731:6;47687:71;:::i;:::-;47768:80;47844:2;47833:9;47829:18;47820:6;47768:80;:::i;:::-;47895:9;47889:4;47885:20;47880:2;47869:9;47865:18;47858:48;47923:108;48026:4;48017:6;47923:108;:::i;:::-;47915:116;;48041:72;48109:2;48098:9;48094:18;48085:6;48041:72;:::i;:::-;48123:73;48191:3;48180:9;48176:19;48167:6;48123:73;:::i;:::-;47372:831;;;;;;;;:::o
Swarm Source
ipfs://be53f31525b3927161dbe82d428c60bd7dc9b544133a2558f995d8294397104e
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.