ERC-20
Overview
Max Total Supply
10,000,000,000 HYCO
Holders
175
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
8,879,601.437470365 HYCOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HYCOTOKEN
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
/* Tokenomics: 8% liquidity (subject to change, up to 12% total tax) 2% redistribution (subject to change, up to 12% total tax) 2% treasury (subject to change, up to 12% total tax) TALU! */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; import "IERC20.sol"; import "Ownable.sol"; import "Context.sol"; import "SafeMath.sol"; import "Address.sol"; contract HYCOTOKEN is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; //// erc20 mapping (address => uint256) private _rOwned; mapping(address => mapping(address => uint256)) private _allowances; // total supply = 10 billion uint256 private constant _tTotal = 10000000000 * 10**_decimals; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal = (MAX - (MAX % _tTotal)); string private _name = 'HYCO TOKEN'; string private _symbol = 'HYCO'; uint8 private constant _decimals = 9; /// uniswap/ pancakeswap address public constant ROUTER_ADDR = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); IUniswapV2Router02 public constant ROUTER = IUniswapV2Router02(ROUTER_ADDR); IERC20 public immutable WETH; address public constant FACTORY_ADDR = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); address public immutable PAIR_ADDR; address public immutable WETH_ADDR; address public immutable MY_ADDR; //// cooldown mapping (address => uint256) public timeTransfer; bool private _cooldownEnabled = true; uint256 private _cooldown = 10 seconds; //// taxes mapping (address => bool) public whitelist; struct Taxes { // 8%, subject to change (up to 12% total tax) uint256 liquidity; // 2%, subject to change (up to 12% total tax) uint256 redistribution; // 2%, subject to change (up to 12% total tax) uint256 treasury; } Taxes private _taxRates = Taxes(80, 20, 20); bool public taxesDisabled; address payable public treasuryAddr = payable(0xB2E3561FB02904DbABb761C32Abe4368538f5097); // gets set to true after openTrading is called, cannot be unset bool public tradingEnabled = false; // in case we want to turn the token in a standard erc20 token for various reasons, cannot be unset bool public isNormalToken = false; bool public swapEnabled = true; bool public inSwap = false; modifier lockTheSwap { inSwap = true; _; inSwap = false; } event SwapTokensForETH(uint256 amountIn, address[] path); event AddedLiquidity(uint256 amountEth, uint256 amountTokens); constructor () { PAIR_ADDR = UniswapV2Library.pairFor(FACTORY_ADDR, ROUTER.WETH(), address(this)); WETH_ADDR = ROUTER.WETH(); WETH = IERC20(IUniswapV2Router02(ROUTER).WETH()); MY_ADDR = address(this); _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); whitelist[address(this)] = true; whitelist[_msgSender()] = true; // not strictly necessary, but probably sensible whitelist[treasuryAddr] = true; } receive() external payable {} function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { 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); } function _transfer(address sender, address recipient, uint256 tAmount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(tAmount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || whitelist[sender] || whitelist[recipient], "Trading is not live yet. "); if (isNormalToken || inSwap || whitelist[sender] || whitelist[recipient]) { _tokenTransferWithoutFees(sender, recipient, tAmount); return; } // buys if (sender == PAIR_ADDR && recipient != ROUTER_ADDR) { if (_cooldownEnabled) { _checkCooldown(recipient); } } // sells if (recipient == PAIR_ADDR && sender != ROUTER_ADDR) { if (_cooldownEnabled) { _checkCooldown(sender); } if (swapEnabled) { _doTheSwap(); } } _tokenTransferWithFees(sender, recipient, tAmount); } function _checkCooldown(address addr) private { // enforce cooldown and note down time require( timeTransfer[addr].add(_cooldown) < block.timestamp, "Need to wait until next transfer. " ); timeTransfer[addr] = block.timestamp; } function _doTheSwap() private { if (balanceOf(MY_ADDR) == 0) { return; } // percentages of respective swaps uint256 total = _taxRates.liquidity.add(_taxRates.treasury); uint256 totalMinusLiq = total.sub(_taxRates.liquidity.div(2)); uint256 toBeSwappedPerc = totalMinusLiq.mul(1000).div(total); uint256 liqEthPerc = _taxRates.liquidity.div(2).mul(1000).div(totalMinusLiq); swapTokensForETH(balanceOf(MY_ADDR).mul(toBeSwappedPerc).div(1000)); uint256 ethForLiq = MY_ADDR.balance.mul(liqEthPerc).div(1000); uint256 ethForTreasury = MY_ADDR.balance.sub(ethForLiq); if (ethForLiq != 0) { uint256 tokensForLiq = balanceOf(MY_ADDR); addLiquidity(tokensForLiq, ethForLiq); emit AddedLiquidity(tokensForLiq, ethForLiq); } treasuryAddr.transfer(ethForTreasury); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(MY_ADDR, ROUTER_ADDR, tokenAmount); ROUTER.addLiquidityETH{value: ethAmount}( MY_ADDR, tokenAmount, 0, 0, owner(), block.timestamp ); } function _tokenTransferWithoutFees(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rAmount); emit Transfer(sender, recipient, tAmount); } function _tokenTransferWithFees(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); // getting tax values Taxes memory tTaxValues = _getTTaxValues(tAmount, _taxRates); Taxes memory rTaxValues = _getRTaxValues(tTaxValues); uint256 rTransferAmount = _getTransferAmount(rAmount, rTaxValues); uint256 tTransferAmount = _getTransferAmount(tAmount, tTaxValues); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _rOwned[MY_ADDR] = _rOwned[MY_ADDR].add(rTaxValues.treasury).add(rTaxValues.liquidity); _rTotal = _rTotal.sub(rTaxValues.redistribution); emit Transfer(sender, recipient, tTransferAmount); } function swapTokensForETH(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = MY_ADDR; path[1] = WETH_ADDR; _approve(MY_ADDR, ROUTER_ADDR, tokenAmount); ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, payable(this), block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function _getRate() private view returns(uint256) { return _rTotal.div(_tTotal); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less or equal than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _getTTaxValues(uint256 amount, Taxes memory taxRates) private pure returns (Taxes memory) { Taxes memory taxValues; taxValues.redistribution = amount.div(1000).mul(taxRates.redistribution); taxValues.treasury = amount.div(1000).mul(taxRates.treasury); taxValues.liquidity = amount.div(1000).mul(taxRates.liquidity); return taxValues; } function _getRTaxValues(Taxes memory tTaxValues) private view returns (Taxes memory) { Taxes memory taxValues; uint256 currentRate = _getRate(); taxValues.redistribution = tTaxValues.redistribution.mul(currentRate); taxValues.treasury = tTaxValues.treasury.mul(currentRate); taxValues.liquidity = tTaxValues.liquidity.mul(currentRate); return taxValues; } function _getTransferAmount(uint256 amount, Taxes memory taxValues) private pure returns (uint256) { return amount.sub(taxValues.treasury).sub(taxValues.liquidity).sub(taxValues.redistribution); } function openTrading() external onlyOwner() { tradingEnabled = true; } function manualTaxConv() external view onlyOwner() { _doTheSwap; } function setWhitelist(address addr, bool onoff) external onlyOwner() { whitelist[addr] = onoff; } function setTreasuryWallet(address payable treasury) external onlyOwner() { treasuryAddr = treasury; } function setCooldownEnabled(bool onoff) external onlyOwner() { _cooldownEnabled = onoff; } function setTaxesDisabled(bool onoff) external onlyOwner() { taxesDisabled = onoff; } function setSwapEnabled(bool onoff) external onlyOwner() { swapEnabled = onoff; } function convertToStandardToken() external onlyOwner() { isNormalToken = true; } function setTaxes(uint256 liquidity, uint256 redistribution, uint256 treasury) external onlyOwner { require(treasury.add(redistribution).add(liquidity) <= 120, "The taxes are too high, sire. "); _taxRates.liquidity = liquidity; _taxRates.redistribution = redistribution; _taxRates.treasury = treasury; } } library UniswapV2Library { // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash ))))); } } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AddedLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FACTORY_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MY_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIR_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUTER_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertToStandardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"isNormalToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualTaxConv","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"redistribution","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setTaxesDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"treasury","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040526009600a62000015919062000c9f565b6402540be40062000027919062000ddc565b60001962000036919062000f35565b60001962000045919062000e3d565b6003556040518060400160405280600a81526020017f4859434f20544f4b454e00000000000000000000000000000000000000000000815250600490805190602001906200009592919062000971565b506040518060400160405280600481526020017f4859434f0000000000000000000000000000000000000000000000000000000081525060059080519060200190620000e392919062000971565b506001600760006101000a81548160ff021916908315150217905550600a600855604051806060016040528060508152602001601481526020016014815250600a600082015181600001556020820151816001015560408201518160020155505073b2e3561fb02904dbabb761c32abe4368538f5097600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60156101000a81548160ff0219169083151502179055506000600d60166101000a81548160ff0219169083151502179055506001600d60176101000a81548160ff0219169083151502179055506000600d60186101000a81548160ff0219169083151502179055503480156200021257600080fd5b50600062000225620007b560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000384735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033757600080fd5b505afa1580156200034c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000372919062000a38565b30620007bd60201b6200190a1760201c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041557600080fd5b505afa1580156200042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000450919062000a38565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004e157600080fd5b505afa158015620004f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051c919062000a38565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250503073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060035460016000620005a0620007b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620005ee620007b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200064d919062000c9f565b6402540be4006200065f919062000ddc565b6040516200066e919062000c0b565b60405180910390a36001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620006e4620007b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620010fd565b600033905090565b6000806000620007d485856200083b60201b60201c565b91509150858282604051602001620007ee92919062000b4d565b604051602081830303815290604052805190602001206040516020016200081792919062000b7d565b6040516020818303038152906040528051906020012060001c925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620008b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a79062000bc7565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610620008ec578284620008ef565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009619062000be9565b60405180910390fd5b9250929050565b8280546200097f9062000ecd565b90600052602060002090601f016020900481019282620009a35760008555620009ef565b82601f10620009be57805160ff1916838001178555620009ef565b82800160010185558215620009ef579182015b82811115620009ee578251825591602001919060010190620009d1565b5b509050620009fe919062000a02565b5090565b5b8082111562000a1d57600081600090555060010162000a03565b5090565b60008151905062000a3281620010e3565b92915050565b60006020828403121562000a515762000a5062000ffa565b5b600062000a618482850162000a21565b91505092915050565b62000a7f62000a798262000e78565b62000f03565b82525050565b62000a9a62000a948262000e8c565b62000f17565b82525050565b600062000aaf60258362000c28565b915062000abc8262001019565b604082019050919050565b600062000ad660208362000c39565b915062000ae38262001068565b602082019050919050565b600062000afd60018362000c39565b915062000b0a8262001091565b600182019050919050565b600062000b24601e8362000c28565b915062000b3182620010ba565b602082019050919050565b62000b478162000eb6565b82525050565b600062000b5b828562000a6a565b60148201915062000b6d828462000a6a565b6014820191508190509392505050565b600062000b8a8262000aee565b915062000b98828562000a6a565b60148201915062000baa828462000a85565b60208201915062000bbb8262000ac7565b91508190509392505050565b6000602082019050818103600083015262000be28162000aa0565b9050919050565b6000602082019050818103600083015262000c048162000b15565b9050919050565b600060208201905062000c22600083018462000b3c565b92915050565b600082825260208201905092915050565b600081905092915050565b6000808291508390505b600185111562000c965780860481111562000c6e5762000c6d62000f6d565b5b600185161562000c7e5780820291505b808102905062000c8e856200100c565b945062000c4e565b94509492505050565b600062000cac8262000eb6565b915062000cb98362000ec0565b925062000ce87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cf0565b905092915050565b60008262000d02576001905062000dd5565b8162000d12576000905062000dd5565b816001811462000d2b576002811462000d365762000d6c565b600191505062000dd5565b60ff84111562000d4b5762000d4a62000f6d565b5b8360020a91508482111562000d655762000d6462000f6d565b5b5062000dd5565b5060208310610133831016604e8410600b841016171562000da65782820a90508381111562000da05762000d9f62000f6d565b5b62000dd5565b62000db5848484600162000c44565b9250905081840481111562000dcf5762000dce62000f6d565b5b81810290505b9392505050565b600062000de98262000eb6565b915062000df68362000eb6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e325762000e3162000f6d565b5b828202905092915050565b600062000e4a8262000eb6565b915062000e578362000eb6565b92508282101562000e6d5762000e6c62000f6d565b5b828203905092915050565b600062000e858262000e96565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000ee657607f821691505b6020821081141562000efd5762000efc62000fcb565b5b50919050565b600062000f108262000f21565b9050919050565b6000819050919050565b600062000f2e8262000fff565b9050919050565b600062000f428262000eb6565b915062000f4f8362000eb6565b92508262000f625762000f6162000f9c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160601b9050919050565b60008160011c9050919050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b620010ee8162000e78565b8114620010fa57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c614444620011a560003960008181610b59015281816120bd015281816121bc0152818161220f0152818161226b015281816122c001528181612924015281816129a001528181612b2301528181612c0401528181612d230152612d900152600081816110410152612b920152600081816113c001528181611e4f0152611f0f015260006112eb01526144446000f3fe6080604052600436106102345760003560e01c806381f181431161012e578063c9567bf9116100ab578063e01af92c1161006f578063e01af92c14610866578063e9dae5ed1461088f578063f2fde38b146108b8578063fcd80a31146108e1578063fd6d0eb3146108f85761023b565b8063c9567bf914610793578063cdf1fb51146107aa578063ce62da3f146107d5578063d8306786146107fe578063dd62ed3e146108295761023b565b8063a457c2d7116100f2578063a457c2d71461069a578063a8602fea146106d7578063a9059cbb14610700578063ad5c46481461073d578063b13e6196146107685761023b565b806381f18143146105c557806382dfc5f7146105dc5780638da5cb5b1461060757806395d89b41146106325780639b19251a1461065d5761023b565b806332fe7b26116101bc5780635932ead1116101805780635932ead1146104f25780636ddd17131461051b57806370a0823114610546578063715018a6146105835780637df919251461059a5761023b565b806332fe7b26146103f95780633734aa7c1461042457806339509351146104615780634ada218b1461049e57806353d6fd59146104c95761023b565b806323b872dd1161020357806323b872dd146102fe5780632d8381191461033b5780632db78e591461037857806330d9a62a146103a3578063313ce567146103ce5761023b565b806306fdde0314610240578063095ea7b31461026b578063134d67e5146102a857806318160ddd146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610923565b604051610262919061378c565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613176565b6109b5565b60405161029f919061373b565b60405180910390f35b3480156102b457600080fd5b506102bd6109d3565b6040516102ca91906136a4565b60405180910390f35b3480156102df57600080fd5b506102e86109eb565b6040516102f5919061394e565b60405180910390f35b34801561030a57600080fd5b50610325600480360381019061032091906130e3565b610a10565b604051610332919061373b565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d91906131e3565b610ae9565b60405161036f919061394e565b60405180910390f35b34801561038457600080fd5b5061038d610b57565b60405161039a91906136a4565b60405180910390f35b3480156103af57600080fd5b506103b8610b7b565b6040516103c591906136bf565b60405180910390f35b3480156103da57600080fd5b506103e3610ba1565b6040516103f09190613a1c565b60405180910390f35b34801561040557600080fd5b5061040e610baa565b60405161041b9190613771565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613049565b610bc2565b604051610458919061394e565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613176565b610bda565b604051610495919061373b565b60405180910390f35b3480156104aa57600080fd5b506104b3610c8d565b6040516104c0919061373b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613136565b610ca0565b005b3480156104fe57600080fd5b50610519600480360381019061051491906131b6565b610d77565b005b34801561052757600080fd5b50610530610e10565b60405161053d919061373b565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613049565b610e23565b60405161057a919061394e565b60405180910390f35b34801561058f57600080fd5b50610598610e74565b005b3480156105a657600080fd5b506105af610fae565b6040516105bc919061373b565b60405180910390f35b3480156105d157600080fd5b506105da610fc1565b005b3480156105e857600080fd5b506105f161103f565b6040516105fe91906136a4565b60405180910390f35b34801561061357600080fd5b5061061c611063565b60405161062991906136a4565b60405180910390f35b34801561063e57600080fd5b5061064761108c565b604051610654919061378c565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613049565b61111e565b604051610691919061373b565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613176565b61113e565b6040516106ce919061373b565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613076565b61120b565b005b34801561070c57600080fd5b5061072760048036038101906107229190613176565b6112cb565b604051610734919061373b565b60405180910390f35b34801561074957600080fd5b506107526112e9565b60405161075f9190613756565b60405180910390f35b34801561077457600080fd5b5061077d61130d565b60405161078a91906136a4565b60405180910390f35b34801561079f57600080fd5b506107a8611325565b005b3480156107b657600080fd5b506107bf6113be565b6040516107cc91906136a4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906131b6565b6113e2565b005b34801561080a57600080fd5b5061081361147b565b604051610820919061373b565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906130a3565b61148e565b60405161085d919061394e565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906131b6565b611515565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613210565b6115ae565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613049565b6116b5565b005b3480156108ed57600080fd5b506108f661185e565b005b34801561090457600080fd5b5061090d6118f7565b60405161091a919061373b565b60405180910390f35b60606004805461093290613e2d565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90613e2d565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c96109c261197c565b8484611984565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60006009600a6109fb9190613b71565b6402540be400610a0b9190613c8f565b905090565b6000610a1d848484611b4f565b610ade84610a2961197c565b610ad9856040518060600160405280602881526020016143c260289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8f61197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc9092919063ffffffff16565b611984565b600190509392505050565b6000600354821115610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b279061382e565b60405180910390fd5b6000610b3a612051565b9050610b4f818461208a90919063ffffffff16565b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60066020528060005260406000206000915090505481565b6000610c83610be761197c565b84610c7e8560026000610bf861197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b611984565b6001905092915050565b600d60159054906101000a900460ff1681565b610ca861197c565b73ffffffffffffffffffffffffffffffffffffffff16610cc6611063565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906138ae565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d7f61197c565b73ffffffffffffffffffffffffffffffffffffffff16610d9d611063565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea906138ae565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b600d60179054906101000a900460ff1681565b6000610e6d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae9565b9050919050565b610e7c61197c565b73ffffffffffffffffffffffffffffffffffffffff16610e9a611063565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee7906138ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60169054906101000a900460ff1681565b610fc961197c565b73ffffffffffffffffffffffffffffffffffffffff16610fe7611063565b73ffffffffffffffffffffffffffffffffffffffff161461103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906138ae565b60405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461109b90613e2d565b80601f01602080910402602001604051908101604052809291908181526020018280546110c790613e2d565b80156111145780601f106110e957610100808354040283529160200191611114565b820191906000526020600020905b8154815290600101906020018083116110f757829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600061120161114b61197c565b846111fc856040518060600160405280602581526020016143ea602591396002600061117561197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc9092919063ffffffff16565b611984565b6001905092915050565b61121361197c565b73ffffffffffffffffffffffffffffffffffffffff16611231611063565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906138ae565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112df6112d861197c565b8484611b4f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b61132d61197c565b73ffffffffffffffffffffffffffffffffffffffff1661134b611063565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611398906138ae565b60405180910390fd5b6001600d60156101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113ea61197c565b73ffffffffffffffffffffffffffffffffffffffff16611408611063565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906138ae565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600d60189054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61151d61197c565b73ffffffffffffffffffffffffffffffffffffffff1661153b611063565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611588906138ae565b60405180910390fd5b80600d60176101000a81548160ff02191690831515021790555050565b6115b661197c565b73ffffffffffffffffffffffffffffffffffffffff166115d4611063565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906138ae565b60405180910390fd5b60786116518461164385856120a090919063ffffffff16565b6120a090919063ffffffff16565b1115611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899061386e565b60405180910390fd5b82600a6000018190555081600a6001018190555080600a60020181905550505050565b6116bd61197c565b73ffffffffffffffffffffffffffffffffffffffff166116db611063565b73ffffffffffffffffffffffffffffffffffffffff1614611731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611728906138ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906137ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61186661197c565b73ffffffffffffffffffffffffffffffffffffffff16611884611063565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906138ae565b60405180910390fd5b6001600d60166101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1681565b6000806000611919858561239d565b91509150858282604051602001611931929190613636565b60405160208183030381529060405280519060200120604051602001611958929190613662565b6040516020818303038152906040528051906020012060001c925050509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb9061390e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906137ee565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b42919061394e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906138ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c26906137ae565b60405180910390fd5b60008111611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69906138ce565b60405180910390fd5b600d60159054906101000a900460ff1680611cd65750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d2a5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061388e565b60405180910390fd5b600d60169054906101000a900460ff1680611d905750600d60189054906101000a900460ff165b80611de45750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e385750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e4d57611e488383836124cb565b611ff7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611ee85750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611f0d57600760009054906101000a900460ff1615611f0c57611f0b82612684565b5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611fa85750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611feb57600760009054906101000a900460ff1615611fcc57611fcb83612684565b5b600d60179054906101000a900460ff1615611fea57611fe96120b6565b5b5b611ff6838383612760565b5b505050565b6000838311158290612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b919061378c565b60405180910390fd5b5082840390509392505050565b60006120856009600a6120649190613b71565b6402540be4006120749190613c8f565b60035461208a90919063ffffffff16565b905090565b600081836120989190613aed565b905092915050565b600081836120ae9190613a97565b905092915050565b60006120e17f0000000000000000000000000000000000000000000000000000000000000000610e23565b14156120ec5761239b565b600061210b600a60020154600a600001546120a090919063ffffffff16565b9050600061213a61212b6002600a6000015461208a90919063ffffffff16565b83612a8c90919063ffffffff16565b90506000612165836121576103e885612aa290919063ffffffff16565b61208a90919063ffffffff16565b905060006121a88361219a6103e861218c6002600a6000015461208a90919063ffffffff16565b612aa290919063ffffffff16565b61208a90919063ffffffff16565b90506122016121fc6103e86121ee856121e07f0000000000000000000000000000000000000000000000000000000000000000610e23565b612aa290919063ffffffff16565b61208a90919063ffffffff16565b612ab8565b60006122616103e8612253847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1631612aa290919063ffffffff16565b61208a90919063ffffffff16565b905060006122af827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1631612a8c90919063ffffffff16565b90506000821461232b5760006122e47f0000000000000000000000000000000000000000000000000000000000000000610e23565b90506122f08184612d1e565b7fe74b04c1435e286c6b8eba73f0f16a0a2fcc9d21d879598ecacf17db8c49770181846040516123219291906139f3565b60405180910390a1505b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612393573d6000803e3d6000fd5b505050505050505b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061384e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061244957828461244c565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb9061392e565b60405180910390fd5b9250929050565b60006124d5612051565b905060006124ec8284612aa290919063ffffffff16565b905061254081600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8c90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125d581600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612675919061394e565b60405180910390a35050505050565b426126d9600854600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b10612719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127109061380e565b60405180910390fd5b42600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600061276a612051565b905060006127818284612aa290919063ffffffff16565b905060006127b984600a6040518060600160405290816000820154815260200160018201548152602001600282015481525050612e36565b905060006127c682612eec565b905060006127d48483612f72565b905060006127e28785612f72565b905061283685600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128cb82600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061299a836000015161298c8560400151600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b6120a090919063ffffffff16565b600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a168360200151600354612a8c90919063ffffffff16565b6003819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a79919061394e565b60405180910390a3505050505050505050565b60008183612a9a9190613ce9565b905092915050565b60008183612ab09190613c8f565b905092915050565b6001600d60186101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612af057612aef613f49565b5b604051908082528060200260200182016040528015612b1e5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000081600081518110612b5657612b55613f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612bc557612bc4613f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c3e7f0000000000000000000000000000000000000000000000000000000000000000737a250d5630b4cf539739df2c5dacb4c659f2488d84611984565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c94959493929190613999565b600060405180830381600087803b158015612cae57600080fd5b505af1158015612cc2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612cf7929190613969565b60405180910390a1506000600d60186101000a81548160ff02191690831515021790555050565b612d5d7f0000000000000000000000000000000000000000000000000000000000000000737a250d5630b4cf539739df2c5dacb4c659f2488d84611984565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719827f000000000000000000000000000000000000000000000000000000000000000085600080612dbb611063565b426040518863ffffffff1660e01b8152600401612ddd969594939291906136da565b6060604051808303818588803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e2f9190613263565b5050505050565b612e3e612fbf565b612e46612fbf565b612e718360200151612e636103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b816020018181525050612ea58360400151612e976103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b816040018181525050612ed98360000151612ecb6103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b8160000181815250508091505092915050565b612ef4612fbf565b612efc612fbf565b6000612f06612051565b9050612f1f818560200151612aa290919063ffffffff16565b826020018181525050612f3f818560400151612aa290919063ffffffff16565b826040018181525050612f5f818560000151612aa290919063ffffffff16565b8260000181815250508192505050919050565b6000612fb78260200151612fa98460000151612f9b866040015188612a8c90919063ffffffff16565b612a8c90919063ffffffff16565b612a8c90919063ffffffff16565b905092915050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050612fef81614365565b92915050565b6000813590506130048161437c565b92915050565b60008135905061301981614393565b92915050565b60008135905061302e816143aa565b92915050565b600081519050613043816143aa565b92915050565b60006020828403121561305f5761305e613f78565b5b600061306d84828501612fe0565b91505092915050565b60006020828403121561308c5761308b613f78565b5b600061309a84828501612ff5565b91505092915050565b600080604083850312156130ba576130b9613f78565b5b60006130c885828601612fe0565b92505060206130d985828601612fe0565b9150509250929050565b6000806000606084860312156130fc576130fb613f78565b5b600061310a86828701612fe0565b935050602061311b86828701612fe0565b925050604061312c8682870161301f565b9150509250925092565b6000806040838503121561314d5761314c613f78565b5b600061315b85828601612fe0565b925050602061316c8582860161300a565b9150509250929050565b6000806040838503121561318d5761318c613f78565b5b600061319b85828601612fe0565b92505060206131ac8582860161301f565b9150509250929050565b6000602082840312156131cc576131cb613f78565b5b60006131da8482850161300a565b91505092915050565b6000602082840312156131f9576131f8613f78565b5b60006132078482850161301f565b91505092915050565b60008060006060848603121561322957613228613f78565b5b60006132378682870161301f565b93505060206132488682870161301f565b92505060406132598682870161301f565b9150509250925092565b60008060006060848603121561327c5761327b613f78565b5b600061328a86828701613034565b935050602061329b86828701613034565b92505060406132ac86828701613034565b9150509250925092565b60006132c283836132ec565b60208301905092915050565b6132d781613d8e565b82525050565b6132e681613d2f565b82525050565b6132f581613d1d565b82525050565b61330481613d1d565b82525050565b61331b61331682613d1d565b613e5f565b82525050565b600061332c82613a47565b6133368185613a6a565b935061334183613a37565b8060005b8381101561337257815161335988826132b6565b975061336483613a5d565b925050600181019050613345565b5085935050505092915050565b61338881613d41565b82525050565b61339f61339a82613d4d565b613e71565b82525050565b6133ae81613da0565b82525050565b6133bd81613db2565b82525050565b6133cc81613dc4565b82525050565b60006133dd82613a52565b6133e78185613a7b565b93506133f7818560208601613dfa565b61340081613f7d565b840191505092915050565b6000613418602383613a7b565b915061342382613fa8565b604082019050919050565b600061343b602683613a7b565b915061344682613ff7565b604082019050919050565b600061345e602283613a7b565b915061346982614046565b604082019050919050565b6000613481602283613a7b565b915061348c82614095565b604082019050919050565b60006134a4603383613a7b565b91506134af826140e4565b604082019050919050565b60006134c7602583613a7b565b91506134d282614133565b604082019050919050565b60006134ea601e83613a7b565b91506134f582614182565b602082019050919050565b600061350d602083613a8c565b9150613518826141ab565b602082019050919050565b6000613530601983613a7b565b915061353b826141d4565b602082019050919050565b6000613553600183613a8c565b915061355e826141fd565b600182019050919050565b6000613576602083613a7b565b915061358182614226565b602082019050919050565b6000613599602983613a7b565b91506135a48261424f565b604082019050919050565b60006135bc602583613a7b565b91506135c78261429e565b604082019050919050565b60006135df602483613a7b565b91506135ea826142ed565b604082019050919050565b6000613602601e83613a7b565b915061360d8261433c565b602082019050919050565b61362181613d77565b82525050565b61363081613d81565b82525050565b6000613642828561330a565b601482019150613652828461330a565b6014820191508190509392505050565b600061366d82613546565b9150613679828561330a565b601482019150613689828461338e565b60208201915061369882613500565b91508190509392505050565b60006020820190506136b960008301846132fb565b92915050565b60006020820190506136d460008301846132dd565b92915050565b600060c0820190506136ef60008301896132fb565b6136fc6020830188613618565b61370960408301876133c3565b61371660608301866133c3565b61372360808301856132fb565b61373060a0830184613618565b979650505050505050565b6000602082019050613750600083018461337f565b92915050565b600060208201905061376b60008301846133a5565b92915050565b600060208201905061378660008301846133b4565b92915050565b600060208201905081810360008301526137a681846133d2565b905092915050565b600060208201905081810360008301526137c78161340b565b9050919050565b600060208201905081810360008301526137e78161342e565b9050919050565b6000602082019050818103600083015261380781613451565b9050919050565b6000602082019050818103600083015261382781613474565b9050919050565b6000602082019050818103600083015261384781613497565b9050919050565b60006020820190508181036000830152613867816134ba565b9050919050565b60006020820190508181036000830152613887816134dd565b9050919050565b600060208201905081810360008301526138a781613523565b9050919050565b600060208201905081810360008301526138c781613569565b9050919050565b600060208201905081810360008301526138e78161358c565b9050919050565b60006020820190508181036000830152613907816135af565b9050919050565b60006020820190508181036000830152613927816135d2565b9050919050565b60006020820190508181036000830152613947816135f5565b9050919050565b60006020820190506139636000830184613618565b92915050565b600060408201905061397e6000830185613618565b81810360208301526139908184613321565b90509392505050565b600060a0820190506139ae6000830188613618565b6139bb60208301876133c3565b81810360408301526139cd8186613321565b90506139dc60608301856132ce565b6139e96080830184613618565b9695505050505050565b6000604082019050613a086000830185613618565b613a156020830184613618565b9392505050565b6000602082019050613a316000830184613627565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aa282613d77565b9150613aad83613d77565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ae257613ae1613e8d565b5b828201905092915050565b6000613af882613d77565b9150613b0383613d77565b925082613b1357613b12613ebc565b5b828204905092915050565b6000808291508390505b6001851115613b6857808604811115613b4457613b43613e8d565b5b6001851615613b535780820291505b8081029050613b6185613f9b565b9450613b28565b94509492505050565b6000613b7c82613d77565b9150613b8783613d81565b9250613bb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bbc565b905092915050565b600082613bcc5760019050613c88565b81613bda5760009050613c88565b8160018114613bf05760028114613bfa57613c29565b6001915050613c88565b60ff841115613c0c57613c0b613e8d565b5b8360020a915084821115613c2357613c22613e8d565b5b50613c88565b5060208310610133831016604e8410600b8410161715613c5e5782820a905083811115613c5957613c58613e8d565b5b613c88565b613c6b8484846001613b1e565b92509050818404811115613c8257613c81613e8d565b5b81810290505b9392505050565b6000613c9a82613d77565b9150613ca583613d77565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cde57613cdd613e8d565b5b828202905092915050565b6000613cf482613d77565b9150613cff83613d77565b925082821015613d1257613d11613e8d565b5b828203905092915050565b6000613d2882613d57565b9050919050565b6000613d3a82613d57565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d9982613dd6565b9050919050565b6000613dab82613dd6565b9050919050565b6000613dbd82613dd6565b9050919050565b6000613dcf82613d77565b9050919050565b6000613de182613de8565b9050919050565b6000613df382613d57565b9050919050565b60005b83811015613e18578082015181840152602081019050613dfd565b83811115613e27576000848401525b50505050565b60006002820490506001821680613e4557607f821691505b60208210811415613e5957613e58613eeb565b5b50919050565b6000613e6a82613e7b565b9050919050565b6000819050919050565b6000613e8682613f8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f207761697420756e74696c206e657874207472616e7366657260008201527f2e20000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f5468652074617865732061726520746f6f20686967682c20736972652e200000600082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b61436e81613d1d565b811461437957600080fd5b50565b61438581613d2f565b811461439057600080fd5b50565b61439c81613d41565b81146143a757600080fd5b50565b6143b381613d77565b81146143be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010f4270723324f7f70caee9ec3cf016a9ca8b44939543b0734ea4e85100602c064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102345760003560e01c806381f181431161012e578063c9567bf9116100ab578063e01af92c1161006f578063e01af92c14610866578063e9dae5ed1461088f578063f2fde38b146108b8578063fcd80a31146108e1578063fd6d0eb3146108f85761023b565b8063c9567bf914610793578063cdf1fb51146107aa578063ce62da3f146107d5578063d8306786146107fe578063dd62ed3e146108295761023b565b8063a457c2d7116100f2578063a457c2d71461069a578063a8602fea146106d7578063a9059cbb14610700578063ad5c46481461073d578063b13e6196146107685761023b565b806381f18143146105c557806382dfc5f7146105dc5780638da5cb5b1461060757806395d89b41146106325780639b19251a1461065d5761023b565b806332fe7b26116101bc5780635932ead1116101805780635932ead1146104f25780636ddd17131461051b57806370a0823114610546578063715018a6146105835780637df919251461059a5761023b565b806332fe7b26146103f95780633734aa7c1461042457806339509351146104615780634ada218b1461049e57806353d6fd59146104c95761023b565b806323b872dd1161020357806323b872dd146102fe5780632d8381191461033b5780632db78e591461037857806330d9a62a146103a3578063313ce567146103ce5761023b565b806306fdde0314610240578063095ea7b31461026b578063134d67e5146102a857806318160ddd146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610923565b604051610262919061378c565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613176565b6109b5565b60405161029f919061373b565b60405180910390f35b3480156102b457600080fd5b506102bd6109d3565b6040516102ca91906136a4565b60405180910390f35b3480156102df57600080fd5b506102e86109eb565b6040516102f5919061394e565b60405180910390f35b34801561030a57600080fd5b50610325600480360381019061032091906130e3565b610a10565b604051610332919061373b565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d91906131e3565b610ae9565b60405161036f919061394e565b60405180910390f35b34801561038457600080fd5b5061038d610b57565b60405161039a91906136a4565b60405180910390f35b3480156103af57600080fd5b506103b8610b7b565b6040516103c591906136bf565b60405180910390f35b3480156103da57600080fd5b506103e3610ba1565b6040516103f09190613a1c565b60405180910390f35b34801561040557600080fd5b5061040e610baa565b60405161041b9190613771565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613049565b610bc2565b604051610458919061394e565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613176565b610bda565b604051610495919061373b565b60405180910390f35b3480156104aa57600080fd5b506104b3610c8d565b6040516104c0919061373b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613136565b610ca0565b005b3480156104fe57600080fd5b50610519600480360381019061051491906131b6565b610d77565b005b34801561052757600080fd5b50610530610e10565b60405161053d919061373b565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613049565b610e23565b60405161057a919061394e565b60405180910390f35b34801561058f57600080fd5b50610598610e74565b005b3480156105a657600080fd5b506105af610fae565b6040516105bc919061373b565b60405180910390f35b3480156105d157600080fd5b506105da610fc1565b005b3480156105e857600080fd5b506105f161103f565b6040516105fe91906136a4565b60405180910390f35b34801561061357600080fd5b5061061c611063565b60405161062991906136a4565b60405180910390f35b34801561063e57600080fd5b5061064761108c565b604051610654919061378c565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613049565b61111e565b604051610691919061373b565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613176565b61113e565b6040516106ce919061373b565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613076565b61120b565b005b34801561070c57600080fd5b5061072760048036038101906107229190613176565b6112cb565b604051610734919061373b565b60405180910390f35b34801561074957600080fd5b506107526112e9565b60405161075f9190613756565b60405180910390f35b34801561077457600080fd5b5061077d61130d565b60405161078a91906136a4565b60405180910390f35b34801561079f57600080fd5b506107a8611325565b005b3480156107b657600080fd5b506107bf6113be565b6040516107cc91906136a4565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906131b6565b6113e2565b005b34801561080a57600080fd5b5061081361147b565b604051610820919061373b565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906130a3565b61148e565b60405161085d919061394e565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906131b6565b611515565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613210565b6115ae565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613049565b6116b5565b005b3480156108ed57600080fd5b506108f661185e565b005b34801561090457600080fd5b5061090d6118f7565b60405161091a919061373b565b60405180910390f35b60606004805461093290613e2d565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90613e2d565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c96109c261197c565b8484611984565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60006009600a6109fb9190613b71565b6402540be400610a0b9190613c8f565b905090565b6000610a1d848484611b4f565b610ade84610a2961197c565b610ad9856040518060600160405280602881526020016143c260289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8f61197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc9092919063ffffffff16565b611984565b600190509392505050565b6000600354821115610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b279061382e565b60405180910390fd5b6000610b3a612051565b9050610b4f818461208a90919063ffffffff16565b915050919050565b7f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c81565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60066020528060005260406000206000915090505481565b6000610c83610be761197c565b84610c7e8560026000610bf861197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b611984565b6001905092915050565b600d60159054906101000a900460ff1681565b610ca861197c565b73ffffffffffffffffffffffffffffffffffffffff16610cc6611063565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906138ae565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d7f61197c565b73ffffffffffffffffffffffffffffffffffffffff16610d9d611063565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea906138ae565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b600d60179054906101000a900460ff1681565b6000610e6d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae9565b9050919050565b610e7c61197c565b73ffffffffffffffffffffffffffffffffffffffff16610e9a611063565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee7906138ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60169054906101000a900460ff1681565b610fc961197c565b73ffffffffffffffffffffffffffffffffffffffff16610fe7611063565b73ffffffffffffffffffffffffffffffffffffffff161461103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906138ae565b60405180910390fd5b565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461109b90613e2d565b80601f01602080910402602001604051908101604052809291908181526020018280546110c790613e2d565b80156111145780601f106110e957610100808354040283529160200191611114565b820191906000526020600020905b8154815290600101906020018083116110f757829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600061120161114b61197c565b846111fc856040518060600160405280602581526020016143ea602591396002600061117561197c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc9092919063ffffffff16565b611984565b6001905092915050565b61121361197c565b73ffffffffffffffffffffffffffffffffffffffff16611231611063565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e906138ae565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112df6112d861197c565b8484611b4f565b6001905092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b61132d61197c565b73ffffffffffffffffffffffffffffffffffffffff1661134b611063565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611398906138ae565b60405180910390fd5b6001600d60156101000a81548160ff021916908315150217905550565b7f00000000000000000000000039ff96675607636e1875cf23f37b4b21959b12af81565b6113ea61197c565b73ffffffffffffffffffffffffffffffffffffffff16611408611063565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906138ae565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600d60189054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61151d61197c565b73ffffffffffffffffffffffffffffffffffffffff1661153b611063565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611588906138ae565b60405180910390fd5b80600d60176101000a81548160ff02191690831515021790555050565b6115b661197c565b73ffffffffffffffffffffffffffffffffffffffff166115d4611063565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906138ae565b60405180910390fd5b60786116518461164385856120a090919063ffffffff16565b6120a090919063ffffffff16565b1115611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899061386e565b60405180910390fd5b82600a6000018190555081600a6001018190555080600a60020181905550505050565b6116bd61197c565b73ffffffffffffffffffffffffffffffffffffffff166116db611063565b73ffffffffffffffffffffffffffffffffffffffff1614611731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611728906138ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906137ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61186661197c565b73ffffffffffffffffffffffffffffffffffffffff16611884611063565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906138ae565b60405180910390fd5b6001600d60166101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1681565b6000806000611919858561239d565b91509150858282604051602001611931929190613636565b60405160208183030381529060405280519060200120604051602001611958929190613662565b6040516020818303038152906040528051906020012060001c925050509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb9061390e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906137ee565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b42919061394e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906138ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c26906137ae565b60405180910390fd5b60008111611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69906138ce565b60405180910390fd5b600d60159054906101000a900460ff1680611cd65750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d2a5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061388e565b60405180910390fd5b600d60169054906101000a900460ff1680611d905750600d60189054906101000a900460ff165b80611de45750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e385750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e4d57611e488383836124cb565b611ff7565b7f00000000000000000000000039ff96675607636e1875cf23f37b4b21959b12af73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611ee85750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611f0d57600760009054906101000a900460ff1615611f0c57611f0b82612684565b5b5b7f00000000000000000000000039ff96675607636e1875cf23f37b4b21959b12af73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611fa85750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611feb57600760009054906101000a900460ff1615611fcc57611fcb83612684565b5b600d60179054906101000a900460ff1615611fea57611fe96120b6565b5b5b611ff6838383612760565b5b505050565b6000838311158290612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b919061378c565b60405180910390fd5b5082840390509392505050565b60006120856009600a6120649190613b71565b6402540be4006120749190613c8f565b60035461208a90919063ffffffff16565b905090565b600081836120989190613aed565b905092915050565b600081836120ae9190613a97565b905092915050565b60006120e17f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c610e23565b14156120ec5761239b565b600061210b600a60020154600a600001546120a090919063ffffffff16565b9050600061213a61212b6002600a6000015461208a90919063ffffffff16565b83612a8c90919063ffffffff16565b90506000612165836121576103e885612aa290919063ffffffff16565b61208a90919063ffffffff16565b905060006121a88361219a6103e861218c6002600a6000015461208a90919063ffffffff16565b612aa290919063ffffffff16565b61208a90919063ffffffff16565b90506122016121fc6103e86121ee856121e07f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c610e23565b612aa290919063ffffffff16565b61208a90919063ffffffff16565b612ab8565b60006122616103e8612253847f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c73ffffffffffffffffffffffffffffffffffffffff1631612aa290919063ffffffff16565b61208a90919063ffffffff16565b905060006122af827f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c73ffffffffffffffffffffffffffffffffffffffff1631612a8c90919063ffffffff16565b90506000821461232b5760006122e47f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c610e23565b90506122f08184612d1e565b7fe74b04c1435e286c6b8eba73f0f16a0a2fcc9d21d879598ecacf17db8c49770181846040516123219291906139f3565b60405180910390a1505b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612393573d6000803e3d6000fd5b505050505050505b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061384e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061244957828461244c565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb9061392e565b60405180910390fd5b9250929050565b60006124d5612051565b905060006124ec8284612aa290919063ffffffff16565b905061254081600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8c90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125d581600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612675919061394e565b60405180910390a35050505050565b426126d9600854600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b10612719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127109061380e565b60405180910390fd5b42600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600061276a612051565b905060006127818284612aa290919063ffffffff16565b905060006127b984600a6040518060600160405290816000820154815260200160018201548152602001600282015481525050612e36565b905060006127c682612eec565b905060006127d48483612f72565b905060006127e28785612f72565b905061283685600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128cb82600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061299a836000015161298c8560400151600160007f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120a090919063ffffffff16565b6120a090919063ffffffff16565b600160007f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a168360200151600354612a8c90919063ffffffff16565b6003819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a79919061394e565b60405180910390a3505050505050505050565b60008183612a9a9190613ce9565b905092915050565b60008183612ab09190613c8f565b905092915050565b6001600d60186101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612af057612aef613f49565b5b604051908082528060200260200182016040528015612b1e5781602001602082028036833780820191505090505b5090507f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c81600081518110612b5657612b55613f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612bc557612bc4613f1a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c3e7f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c737a250d5630b4cf539739df2c5dacb4c659f2488d84611984565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c94959493929190613999565b600060405180830381600087803b158015612cae57600080fd5b505af1158015612cc2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612cf7929190613969565b60405180910390a1506000600d60186101000a81548160ff02191690831515021790555050565b612d5d7f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c737a250d5630b4cf539739df2c5dacb4c659f2488d84611984565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719827f00000000000000000000000046247ee29ad43b033eb77b542ebc9e3db780a49c85600080612dbb611063565b426040518863ffffffff1660e01b8152600401612ddd969594939291906136da565b6060604051808303818588803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e2f9190613263565b5050505050565b612e3e612fbf565b612e46612fbf565b612e718360200151612e636103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b816020018181525050612ea58360400151612e976103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b816040018181525050612ed98360000151612ecb6103e88761208a90919063ffffffff16565b612aa290919063ffffffff16565b8160000181815250508091505092915050565b612ef4612fbf565b612efc612fbf565b6000612f06612051565b9050612f1f818560200151612aa290919063ffffffff16565b826020018181525050612f3f818560400151612aa290919063ffffffff16565b826040018181525050612f5f818560000151612aa290919063ffffffff16565b8260000181815250508192505050919050565b6000612fb78260200151612fa98460000151612f9b866040015188612a8c90919063ffffffff16565b612a8c90919063ffffffff16565b612a8c90919063ffffffff16565b905092915050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050612fef81614365565b92915050565b6000813590506130048161437c565b92915050565b60008135905061301981614393565b92915050565b60008135905061302e816143aa565b92915050565b600081519050613043816143aa565b92915050565b60006020828403121561305f5761305e613f78565b5b600061306d84828501612fe0565b91505092915050565b60006020828403121561308c5761308b613f78565b5b600061309a84828501612ff5565b91505092915050565b600080604083850312156130ba576130b9613f78565b5b60006130c885828601612fe0565b92505060206130d985828601612fe0565b9150509250929050565b6000806000606084860312156130fc576130fb613f78565b5b600061310a86828701612fe0565b935050602061311b86828701612fe0565b925050604061312c8682870161301f565b9150509250925092565b6000806040838503121561314d5761314c613f78565b5b600061315b85828601612fe0565b925050602061316c8582860161300a565b9150509250929050565b6000806040838503121561318d5761318c613f78565b5b600061319b85828601612fe0565b92505060206131ac8582860161301f565b9150509250929050565b6000602082840312156131cc576131cb613f78565b5b60006131da8482850161300a565b91505092915050565b6000602082840312156131f9576131f8613f78565b5b60006132078482850161301f565b91505092915050565b60008060006060848603121561322957613228613f78565b5b60006132378682870161301f565b93505060206132488682870161301f565b92505060406132598682870161301f565b9150509250925092565b60008060006060848603121561327c5761327b613f78565b5b600061328a86828701613034565b935050602061329b86828701613034565b92505060406132ac86828701613034565b9150509250925092565b60006132c283836132ec565b60208301905092915050565b6132d781613d8e565b82525050565b6132e681613d2f565b82525050565b6132f581613d1d565b82525050565b61330481613d1d565b82525050565b61331b61331682613d1d565b613e5f565b82525050565b600061332c82613a47565b6133368185613a6a565b935061334183613a37565b8060005b8381101561337257815161335988826132b6565b975061336483613a5d565b925050600181019050613345565b5085935050505092915050565b61338881613d41565b82525050565b61339f61339a82613d4d565b613e71565b82525050565b6133ae81613da0565b82525050565b6133bd81613db2565b82525050565b6133cc81613dc4565b82525050565b60006133dd82613a52565b6133e78185613a7b565b93506133f7818560208601613dfa565b61340081613f7d565b840191505092915050565b6000613418602383613a7b565b915061342382613fa8565b604082019050919050565b600061343b602683613a7b565b915061344682613ff7565b604082019050919050565b600061345e602283613a7b565b915061346982614046565b604082019050919050565b6000613481602283613a7b565b915061348c82614095565b604082019050919050565b60006134a4603383613a7b565b91506134af826140e4565b604082019050919050565b60006134c7602583613a7b565b91506134d282614133565b604082019050919050565b60006134ea601e83613a7b565b91506134f582614182565b602082019050919050565b600061350d602083613a8c565b9150613518826141ab565b602082019050919050565b6000613530601983613a7b565b915061353b826141d4565b602082019050919050565b6000613553600183613a8c565b915061355e826141fd565b600182019050919050565b6000613576602083613a7b565b915061358182614226565b602082019050919050565b6000613599602983613a7b565b91506135a48261424f565b604082019050919050565b60006135bc602583613a7b565b91506135c78261429e565b604082019050919050565b60006135df602483613a7b565b91506135ea826142ed565b604082019050919050565b6000613602601e83613a7b565b915061360d8261433c565b602082019050919050565b61362181613d77565b82525050565b61363081613d81565b82525050565b6000613642828561330a565b601482019150613652828461330a565b6014820191508190509392505050565b600061366d82613546565b9150613679828561330a565b601482019150613689828461338e565b60208201915061369882613500565b91508190509392505050565b60006020820190506136b960008301846132fb565b92915050565b60006020820190506136d460008301846132dd565b92915050565b600060c0820190506136ef60008301896132fb565b6136fc6020830188613618565b61370960408301876133c3565b61371660608301866133c3565b61372360808301856132fb565b61373060a0830184613618565b979650505050505050565b6000602082019050613750600083018461337f565b92915050565b600060208201905061376b60008301846133a5565b92915050565b600060208201905061378660008301846133b4565b92915050565b600060208201905081810360008301526137a681846133d2565b905092915050565b600060208201905081810360008301526137c78161340b565b9050919050565b600060208201905081810360008301526137e78161342e565b9050919050565b6000602082019050818103600083015261380781613451565b9050919050565b6000602082019050818103600083015261382781613474565b9050919050565b6000602082019050818103600083015261384781613497565b9050919050565b60006020820190508181036000830152613867816134ba565b9050919050565b60006020820190508181036000830152613887816134dd565b9050919050565b600060208201905081810360008301526138a781613523565b9050919050565b600060208201905081810360008301526138c781613569565b9050919050565b600060208201905081810360008301526138e78161358c565b9050919050565b60006020820190508181036000830152613907816135af565b9050919050565b60006020820190508181036000830152613927816135d2565b9050919050565b60006020820190508181036000830152613947816135f5565b9050919050565b60006020820190506139636000830184613618565b92915050565b600060408201905061397e6000830185613618565b81810360208301526139908184613321565b90509392505050565b600060a0820190506139ae6000830188613618565b6139bb60208301876133c3565b81810360408301526139cd8186613321565b90506139dc60608301856132ce565b6139e96080830184613618565b9695505050505050565b6000604082019050613a086000830185613618565b613a156020830184613618565b9392505050565b6000602082019050613a316000830184613627565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aa282613d77565b9150613aad83613d77565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ae257613ae1613e8d565b5b828201905092915050565b6000613af882613d77565b9150613b0383613d77565b925082613b1357613b12613ebc565b5b828204905092915050565b6000808291508390505b6001851115613b6857808604811115613b4457613b43613e8d565b5b6001851615613b535780820291505b8081029050613b6185613f9b565b9450613b28565b94509492505050565b6000613b7c82613d77565b9150613b8783613d81565b9250613bb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bbc565b905092915050565b600082613bcc5760019050613c88565b81613bda5760009050613c88565b8160018114613bf05760028114613bfa57613c29565b6001915050613c88565b60ff841115613c0c57613c0b613e8d565b5b8360020a915084821115613c2357613c22613e8d565b5b50613c88565b5060208310610133831016604e8410600b8410161715613c5e5782820a905083811115613c5957613c58613e8d565b5b613c88565b613c6b8484846001613b1e565b92509050818404811115613c8257613c81613e8d565b5b81810290505b9392505050565b6000613c9a82613d77565b9150613ca583613d77565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cde57613cdd613e8d565b5b828202905092915050565b6000613cf482613d77565b9150613cff83613d77565b925082821015613d1257613d11613e8d565b5b828203905092915050565b6000613d2882613d57565b9050919050565b6000613d3a82613d57565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d9982613dd6565b9050919050565b6000613dab82613dd6565b9050919050565b6000613dbd82613dd6565b9050919050565b6000613dcf82613d77565b9050919050565b6000613de182613de8565b9050919050565b6000613df382613d57565b9050919050565b60005b83811015613e18578082015181840152602081019050613dfd565b83811115613e27576000848401525b50505050565b60006002820490506001821680613e4557607f821691505b60208210811415613e5957613e58613eeb565b5b50919050565b6000613e6a82613e7b565b9050919050565b6000819050919050565b6000613e8682613f8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f207761697420756e74696c206e657874207472616e7366657260008201527f2e20000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f5468652074617865732061726520746f6f20686967682c20736972652e200000600082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b61436e81613d1d565b811461437957600080fd5b50565b61438581613d2f565b811461439057600080fd5b50565b61439c81613d41565b81146143a757600080fd5b50565b6143b381613d77565b81146143be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010f4270723324f7f70caee9ec3cf016a9ca8b44939543b0734ea4e85100602c064736f6c63430008070033
Deployed Bytecode Sourcemap
371:11990:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4006:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;981:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3448:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4170:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9905:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1367:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1983:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3361:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1076:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1424:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4485:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2148:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11361:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11596:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2336:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3547:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1691:145:4;;;;;;;;;;;;;:::i;:::-;;2292:33:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11277:78;;;;;;;;;;;;;:::i;:::-;;1327:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1059:85:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3270::2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1580:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4706:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11476:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3689:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1157:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1191:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11189:82;;;;;;;;;;;;;:::i;:::-;;1287:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11708:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2372:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3859:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11815:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12020:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1985:240:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11918:92:2;;;;;;;;;;;;;:::i;:::-;;1952:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3183:81;3220:13;3252:5;3245:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:81;:::o;4006:158::-;4081:4;4097:39;4106:12;:10;:12::i;:::-;4120:7;4129:6;4097:8;:39::i;:::-;4153:4;4146:11;;4006:158;;;;:::o;981:89::-;1027:42;981:89;:::o;3448:93::-;3501:7;944:1;708:2;:13;;;;:::i;:::-;694:11;:27;;;;:::i;:::-;3520:14;;3448:93;:::o;4170:309::-;4268:4;4284:36;4294:6;4302:9;4313:6;4284:9;:36::i;:::-;4330:121;4339:6;4347:12;:10;:12::i;:::-;4361:89;4399:6;4361:89;;;;;;;;;;;;;;;;;:11;:19;4373:6;4361:19;;;;;;;;;;;;;;;:33;4381:12;:10;:12::i;:::-;4361:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4330:8;:121::i;:::-;4468:4;4461:11;;4170:309;;;;;:::o;9905:257::-;9971:7;10009;;9998;:18;;9990:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;10082:19;10104:10;:8;:10::i;:::-;10082:32;;10131:24;10143:11;10131:7;:11;;:24;;;;:::i;:::-;10124:31;;;9905:257;;;:::o;1367:32::-;;;:::o;1983:89::-;;;;;;;;;;;;;:::o;3361:81::-;3402:5;944:1;3419:16;;3361:81;:::o;1076:75::-;1027:42;1076:75;:::o;1424:48::-;;;;;;;;;;;;;;;;;:::o;4485:215::-;4573:4;4589:83;4598:12;:10;:12::i;:::-;4612:7;4621:50;4660:10;4621:11;:25;4633:12;:10;:12::i;:::-;4621:25;;;;;;;;;;;;;;;:34;4647:7;4621:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4589:8;:83::i;:::-;4689:4;4682:11;;4485:215;;;;:::o;2148:34::-;;;;;;;;;;;;;:::o;11361:109::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11458:5:2::1;11440:9;:15;11450:4;11440:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;11361:109:::0;;:::o;11596:102::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11686:5:2::1;11667:16;;:24;;;;;;;;;;;;;;;;;;11596:102:::0;:::o;2336:30::-;;;;;;;;;;;;;:::o;3547:136::-;3613:7;3639:37;3659:7;:16;3667:7;3659:16;;;;;;;;;;;;;;;;3639:19;:37::i;:::-;3632:44;;3547:136;;;:::o;1691:145:4:-;1282:12;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1797:1:::1;1760:40;;1781:6;::::0;::::1;;;;;;;;1760:40;;;;;;;;;;;;1827:1;1810:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1691:145::o:0;2292:33:2:-;;;;;;;;;;;;;:::o;11277:78::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11277:78:2:o;1327:34::-;;;:::o;1059:85:4:-;1105:7;1131:6;;;;;;;;;;;1124:13;;1059:85;:::o;3270::2:-;3309:13;3341:7;3334:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3270:85;:::o;1580:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;4706:266::-;4799:4;4815:129;4824:12;:10;:12::i;:::-;4838:7;4847:96;4886:15;4847:96;;;;;;;;;;;;;;;;;:11;:25;4859:12;:10;:12::i;:::-;4847:25;;;;;;;;;;;;;;;:34;4873:7;4847:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4815:8;:129::i;:::-;4961:4;4954:11;;4706:266;;;;:::o;11476:114::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11575:8:2::1;11560:12;;:23;;;;;;;;;;;;;;;;;;11476:114:::0;:::o;3689:164::-;3767:4;3783:42;3793:12;:10;:12::i;:::-;3807:9;3818:6;3783:9;:42::i;:::-;3842:4;3835:11;;3689:164;;;;:::o;1157:28::-;;;:::o;1191:90::-;1238:42;1191:90;:::o;11189:82::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11260:4:2::1;11243:14;;:21;;;;;;;;;;;;;;;;;;11189:82::o:0;1287:34::-;;;:::o;11708:97::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11793:5:2::1;11777:13;;:21;;;;;;;;;;;;;;;;;;11708:97:::0;:::o;2372:26::-;;;;;;;;;;;;;:::o;3859:141::-;3940:7;3966:11;:18;3978:5;3966:18;;;;;;;;;;;;;;;:27;3985:7;3966:27;;;;;;;;;;;;;;;;3959:34;;3859:141;;;;:::o;11815:93::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11896:5:2::1;11882:11;;:19;;;;;;;;;;;;;;;;;;11815:93:::0;:::o;12020:339::-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12183:3:2::1;12136:43;12169:9;12136:28;12149:14;12136:8;:12;;:28;;;;:::i;:::-;:32;;:43;;;;:::i;:::-;:50;;12128:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;12253:9;12231;:19;;:31;;;;12299:14;12272:9;:24;;:41;;;;12344:8;12323:9;:18;;:29;;;;12020:339:::0;;;:::o;1985:240:4:-;1282:12;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2093:1:::1;2073:22;;:8;:22;;;;2065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2182:8;2153:38;;2174:6;::::0;::::1;;;;;;;;2153:38;;;;;;;;;;;;2210:8;2201:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1985:240:::0;:::o;11918:92:2:-;1282:12:4;:10;:12::i;:::-;1271:23;;:7;:5;:7::i;:::-;:23;;;1263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11999:4:2::1;11983:13;;:20;;;;;;;;;;;;;;;;;;11918:92::o:0;1952:25::-;;;;;;;;;;;;;:::o;12928:479::-;13017:12;13042:14;13058;13076:26;13087:6;13095;13076:10;:26::i;:::-;13041:61;;;;13209:7;13261:6;13269;13244:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13234:43;;;;;;13150:246;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13140:257;;;;;;13135:263;;13112:288;;13031:376;;12928:479;;;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;4978:331:2:-;5087:1;5070:19;;:5;:19;;;;5062:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5167:1;5148:21;;:7;:21;;;;5140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5249:6;5219:11;:18;5231:5;5219:18;;;;;;;;;;;;;;;:27;5238:7;5219:27;;;;;;;;;;;;;;;:36;;;;5286:7;5270:32;;5279:5;5270:32;;;5295:6;5270:32;;;;;;:::i;:::-;;;;;;;;4978:331;;;:::o;5315:1171::-;5430:1;5412:20;;:6;:20;;;;5404:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5513:1;5492:23;;:9;:23;;;;5484:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5583:1;5573:7;:11;5565:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;5648:14;;;;;;;;;;;:35;;;;5666:9;:17;5676:6;5666:17;;;;;;;;;;;;;;;;;;;;;;;;;5648:35;:59;;;;5687:9;:20;5697:9;5687:20;;;;;;;;;;;;;;;;;;;;;;;;;5648:59;5640:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;5760:13;;;;;;;;;;;:23;;;;5777:6;;;;;;;;;;;5760:23;:44;;;;5787:9;:17;5797:6;5787:17;;;;;;;;;;;;;;;;;;;;;;;;;5760:44;:68;;;;5808:9;:20;5818:9;5808:20;;;;;;;;;;;;;;;;;;;;;;;;;5760:68;5756:172;;;5844:53;5870:6;5878:9;5889:7;5844:25;:53::i;:::-;5911:7;;5756:172;5976:9;5966:19;;:6;:19;;;:47;;;;;1027:42;5989:24;;:9;:24;;;;5966:47;5962:158;;;6034:16;;;;;;;;;;;6030:80;;;6070:25;6085:9;6070:14;:25::i;:::-;6030:80;5962:158;6172:9;6159:22;;:9;:22;;;:47;;;;;1027:42;6185:21;;:6;:21;;;;6159:47;6155:255;;;6239:16;;;;;;;;;;;6235:77;;;6275:22;6290:6;6275:14;:22::i;:::-;6235:77;6342:11;;;;;;;;;;;6338:62;;;6373:12;:10;:12::i;:::-;6338:62;6155:255;6429:50;6452:6;6460:9;6471:7;6429:22;:50::i;:::-;5315:1171;;;;:::o;4876:201:5:-;4962:7;5018:1;5013;:6;;5021:12;5005:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5059:1;5055;:5;5048:12;;4876:201;;;;;:::o;9805:94:2:-;9846:7;9872:20;944:1;708:2;:13;;;;:::i;:::-;694:11;:27;;;;:::i;:::-;9872:7;;:11;;:20;;;;:::i;:::-;9865:27;;9805:94;:::o;3767:96:5:-;3825:7;3855:1;3851;:5;;;;:::i;:::-;3844:12;;3767:96;;;;:::o;2672:::-;2730:7;2760:1;2756;:5;;;;:::i;:::-;2749:12;;2672:96;;;;:::o;6794:954:2:-;6860:1;6838:18;6848:7;6838:9;:18::i;:::-;:23;6834:60;;;6877:7;;6834:60;6955:13;6971:43;6995:9;:18;;;6971:9;:19;;;:23;;:43;;;;:::i;:::-;6955:59;;7024:21;7048:37;7058:26;7082:1;7058:9;:19;;;:23;;:26;;;;:::i;:::-;7048:5;:9;;:37;;;;:::i;:::-;7024:61;;7095:23;7121:34;7149:5;7121:23;7139:4;7121:13;:17;;:23;;;;:::i;:::-;:27;;:34;;;;:::i;:::-;7095:60;;7174:18;7195:55;7236:13;7195:36;7226:4;7195:26;7219:1;7195:9;:19;;;:23;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;7174:76;;7269:67;7286:49;7330:4;7286:39;7309:15;7286:18;7296:7;7286:9;:18::i;:::-;:22;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;7269:16;:67::i;:::-;7355:17;7375:41;7411:4;7375:31;7395:10;7375:7;:15;;;:19;;:31;;;;:::i;:::-;:35;;:41;;;;:::i;:::-;7355:61;;7426:22;7451:30;7471:9;7451:7;:15;;;:19;;:30;;;;:::i;:::-;7426:55;;7517:1;7504:9;:14;7500:195;;7534:20;7557:18;7567:7;7557:9;:18::i;:::-;7534:41;;7589:37;7602:12;7616:9;7589:12;:37::i;:::-;7645:39;7660:12;7674:9;7645:39;;;;;;;:::i;:::-;;;;;;;;7520:175;7500:195;7704:12;;;;;;;;;;;:21;;:37;7726:14;7704:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6824:924;;;;;;6794:954;:::o;12494:345::-;12569:14;12585;12629:6;12619:16;;:6;:16;;;;12611:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12715:6;12706:15;;:6;:15;;;:53;;12744:6;12752;12706:53;;;12725:6;12733;12706:53;12687:72;;;;;;;;12795:1;12777:20;;:6;:20;;;;12769:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12494:345;;;;;:::o;8080:365::-;8185:19;8207:10;:8;:10::i;:::-;8185:32;;8227:15;8245:24;8257:11;8245:7;:11;;:24;;;;:::i;:::-;8227:42;;8297:28;8317:7;8297;:15;8305:6;8297:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8279:7;:15;8287:6;8279:15;;;;;;;;;;;;;;;:46;;;;8356:31;8379:7;8356;:18;8364:9;8356:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;8335:7;:18;8343:9;8335:18;;;;;;;;;;;;;;;:52;;;;8419:9;8402:36;;8411:6;8402:36;;;8430:7;8402:36;;;;;;:::i;:::-;;;;;;;;8175:270;;8080:365;;;:::o;6496:288::-;6656:15;6620:33;6643:9;;6620:12;:18;6633:4;6620:18;;;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;:51;6599:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;6762:15;6741:12;:18;6754:4;6741:18;;;;;;;;;;;;;;;:36;;;;6496:288;:::o;8451:865::-;8553:19;8575:10;:8;:10::i;:::-;8553:32;;8595:15;8613:24;8625:11;8613:7;:11;;:24;;;;:::i;:::-;8595:42;;8678:23;8704:34;8719:7;8728:9;8704:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:34::i;:::-;8678:60;;8748:23;8774:26;8789:10;8774:14;:26::i;:::-;8748:52;;8819:23;8845:39;8864:7;8873:10;8845:18;:39::i;:::-;8819:65;;8894:23;8920:39;8939:7;8948:10;8920:18;:39::i;:::-;8894:65;;8988:28;9008:7;8988;:15;8996:6;8988:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8970:7;:15;8978:6;8970:15;;;;;;;;;;;;;;;:46;;;;9047:39;9070:15;9047:7;:18;9055:9;9047:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;9026:7;:18;9034:9;9026:18;;;;;;;;;;;;;;;:60;;;;9116:67;9162:10;:20;;;9116:41;9137:10;:19;;;9116:7;:16;9124:7;9116:16;;;;;;;;;;;;;;;;:20;;:41;;;;:::i;:::-;:45;;:67;;;;:::i;:::-;9097:7;:16;9105:7;9097:16;;;;;;;;;;;;;;;:86;;;;9203:38;9215:10;:25;;;9203:7;;:11;;:38;;;;:::i;:::-;9193:7;:48;;;;9282:9;9265:44;;9274:6;9265:44;;;9293:15;9265:44;;;;;;:::i;:::-;;;;;;;;8543:773;;;;;;8451:865;;;:::o;3039:96:5:-;3097:7;3127:1;3123;:5;;;;:::i;:::-;3116:12;;3039:96;;;;:::o;3382:::-;3440:7;3470:1;3466;:5;;;;:::i;:::-;3459:12;;3382:96;;;;:::o;9322:477:2:-;2444:4;2435:6;;:13;;;;;;;;;;;;;;;;;;9399:21:::1;9437:1;9423:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9399:40;;9459:7;9449:4;9454:1;9449:7;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;::::0;::::1;9486:9;9476:4;9481:1;9476:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;::::0;::::1;9506:43;9515:7;1027:42;9537:11;9506:8;:43::i;:::-;1027:42;9560:57;;;9631:11;9656:1;9671:4;9697;9716:15;9560:181;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9757:35;9774:11;9787:4;9757:35;;;;;;;:::i;:::-;;;;;;;;9389:410;2478:5:::0;2469:6;;:14;;;;;;;;;;;;;;;;;;9322:477;:::o;7755:319::-;7835:43;7844:7;1027:42;7866:11;7835:8;:43::i;:::-;1027:42;7889:22;;;7919:9;7943:7;7964:11;7989:1;8005;8021:7;:5;:7::i;:::-;8042:15;7889:178;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;7755:319;;:::o;10168:388::-;10253:12;;:::i;:::-;10277:22;;:::i;:::-;10336:45;10357:8;:23;;;10336:16;10347:4;10336:6;:10;;:16;;;;:::i;:::-;:20;;:45;;;;:::i;:::-;10309:9;:24;;:72;;;;;10412:39;10433:8;:17;;;10412:16;10423:4;10412:6;:10;;:16;;;;:::i;:::-;:20;;:39;;;;:::i;:::-;10391:9;:18;;:60;;;;;10483:40;10504:8;:18;;;10483:16;10494:4;10483:6;:10;;:16;;;;:::i;:::-;:20;;:40;;;;:::i;:::-;10461:9;:19;;:62;;;;;10540:9;10533:16;;;10168:388;;;;:::o;10562:407::-;10633:12;;:::i;:::-;10657:22;;:::i;:::-;10689:19;10711:10;:8;:10::i;:::-;10689:32;;10758:42;10788:11;10758:10;:25;;;:29;;:42;;;;:::i;:::-;10731:9;:24;;:69;;;;;10831:36;10855:11;10831:10;:19;;;:23;;:36;;;;:::i;:::-;10810:9;:18;;:57;;;;;10899:37;10924:11;10899:10;:20;;;:24;;:37;;;;:::i;:::-;10877:9;:19;;:59;;;;;10953:9;10946:16;;;;10562:407;;;:::o;10975:208::-;11065:7;11091:85;11151:9;:24;;;11091:55;11126:9;:19;;;11091:30;11102:9;:18;;;11091:6;:10;;:30;;;;:::i;:::-;:34;;:55;;;;:::i;:::-;:59;;:85;;;;:::i;:::-;11084:92;;10975:208;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:6:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;313:133::-;356:5;394:6;381:20;372:29;;410:30;434:5;410:30;:::i;:::-;313:133;;;;:::o;452:139::-;498:5;536:6;523:20;514:29;;552:33;579:5;552:33;:::i;:::-;452:139;;;;:::o;597:143::-;654:5;685:6;679:13;670:22;;701:33;728:5;701:33;:::i;:::-;597:143;;;;:::o;746:329::-;805:6;854:2;842:9;833:7;829:23;825:32;822:119;;;860:79;;:::i;:::-;822:119;980:1;1005:53;1050:7;1041:6;1030:9;1026:22;1005:53;:::i;:::-;995:63;;951:117;746:329;;;;:::o;1081:345::-;1148:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:119;;;1203:79;;:::i;:::-;1165:119;1323:1;1348:61;1401:7;1392:6;1381:9;1377:22;1348:61;:::i;:::-;1338:71;;1294:125;1081:345;;;;:::o;1432:474::-;1500:6;1508;1557:2;1545:9;1536:7;1532:23;1528:32;1525:119;;;1563:79;;:::i;:::-;1525:119;1683:1;1708:53;1753:7;1744:6;1733:9;1729:22;1708:53;:::i;:::-;1698:63;;1654:117;1810:2;1836:53;1881:7;1872:6;1861:9;1857:22;1836:53;:::i;:::-;1826:63;;1781:118;1432:474;;;;;:::o;1912:619::-;1989:6;1997;2005;2054:2;2042:9;2033:7;2029:23;2025:32;2022:119;;;2060:79;;:::i;:::-;2022:119;2180:1;2205:53;2250:7;2241:6;2230:9;2226:22;2205:53;:::i;:::-;2195:63;;2151:117;2307:2;2333:53;2378:7;2369:6;2358:9;2354:22;2333:53;:::i;:::-;2323:63;;2278:118;2435:2;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2406:118;1912:619;;;;;:::o;2537:468::-;2602:6;2610;2659:2;2647:9;2638:7;2634:23;2630:32;2627:119;;;2665:79;;:::i;:::-;2627:119;2785:1;2810:53;2855:7;2846:6;2835:9;2831:22;2810:53;:::i;:::-;2800:63;;2756:117;2912:2;2938:50;2980:7;2971:6;2960:9;2956:22;2938:50;:::i;:::-;2928:60;;2883:115;2537:468;;;;;:::o;3011:474::-;3079:6;3087;3136:2;3124:9;3115:7;3111:23;3107:32;3104:119;;;3142:79;;:::i;:::-;3104:119;3262:1;3287:53;3332:7;3323:6;3312:9;3308:22;3287:53;:::i;:::-;3277:63;;3233:117;3389:2;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;:::i;:::-;3405:63;;3360:118;3011:474;;;;;:::o;3491:323::-;3547:6;3596:2;3584:9;3575:7;3571:23;3567:32;3564:119;;;3602:79;;:::i;:::-;3564:119;3722:1;3747:50;3789:7;3780:6;3769:9;3765:22;3747:50;:::i;:::-;3737:60;;3693:114;3491:323;;;;:::o;3820:329::-;3879:6;3928:2;3916:9;3907:7;3903:23;3899:32;3896:119;;;3934:79;;:::i;:::-;3896:119;4054:1;4079:53;4124:7;4115:6;4104:9;4100:22;4079:53;:::i;:::-;4069:63;;4025:117;3820:329;;;;:::o;4155:619::-;4232:6;4240;4248;4297:2;4285:9;4276:7;4272:23;4268:32;4265:119;;;4303:79;;:::i;:::-;4265:119;4423:1;4448:53;4493:7;4484:6;4473:9;4469:22;4448:53;:::i;:::-;4438:63;;4394:117;4550:2;4576:53;4621:7;4612:6;4601:9;4597:22;4576:53;:::i;:::-;4566:63;;4521:118;4678:2;4704:53;4749:7;4740:6;4729:9;4725:22;4704:53;:::i;:::-;4694:63;;4649:118;4155:619;;;;;:::o;4780:663::-;4868:6;4876;4884;4933:2;4921:9;4912:7;4908:23;4904:32;4901:119;;;4939:79;;:::i;:::-;4901:119;5059:1;5084:64;5140:7;5131:6;5120:9;5116:22;5084:64;:::i;:::-;5074:74;;5030:128;5197:2;5223:64;5279:7;5270:6;5259:9;5255:22;5223:64;:::i;:::-;5213:74;;5168:129;5336:2;5362:64;5418:7;5409:6;5398:9;5394:22;5362:64;:::i;:::-;5352:74;;5307:129;4780:663;;;;;:::o;5449:179::-;5518:10;5539:46;5581:3;5573:6;5539:46;:::i;:::-;5617:4;5612:3;5608:14;5594:28;;5449:179;;;;:::o;5634:147::-;5729:45;5768:5;5729:45;:::i;:::-;5724:3;5717:58;5634:147;;:::o;5787:142::-;5890:32;5916:5;5890:32;:::i;:::-;5885:3;5878:45;5787:142;;:::o;5935:108::-;6012:24;6030:5;6012:24;:::i;:::-;6007:3;6000:37;5935:108;;:::o;6049:118::-;6136:24;6154:5;6136:24;:::i;:::-;6131:3;6124:37;6049:118;;:::o;6173:157::-;6278:45;6298:24;6316:5;6298:24;:::i;:::-;6278:45;:::i;:::-;6273:3;6266:58;6173:157;;:::o;6366:732::-;6485:3;6514:54;6562:5;6514:54;:::i;:::-;6584:86;6663:6;6658:3;6584:86;:::i;:::-;6577:93;;6694:56;6744:5;6694:56;:::i;:::-;6773:7;6804:1;6789:284;6814:6;6811:1;6808:13;6789:284;;;6890:6;6884:13;6917:63;6976:3;6961:13;6917:63;:::i;:::-;6910:70;;7003:60;7056:6;7003:60;:::i;:::-;6993:70;;6849:224;6836:1;6833;6829:9;6824:14;;6789:284;;;6793:14;7089:3;7082:10;;6490:608;;;6366:732;;;;:::o;7104:109::-;7185:21;7200:5;7185:21;:::i;:::-;7180:3;7173:34;7104:109;;:::o;7219:157::-;7324:45;7344:24;7362:5;7344:24;:::i;:::-;7324:45;:::i;:::-;7319:3;7312:58;7219:157;;:::o;7382:161::-;7484:52;7530:5;7484:52;:::i;:::-;7479:3;7472:65;7382:161;;:::o;7549:185::-;7663:64;7721:5;7663:64;:::i;:::-;7658:3;7651:77;7549:185;;:::o;7740:147::-;7835:45;7874:5;7835:45;:::i;:::-;7830:3;7823:58;7740:147;;:::o;7893:364::-;7981:3;8009:39;8042:5;8009:39;:::i;:::-;8064:71;8128:6;8123:3;8064:71;:::i;:::-;8057:78;;8144:52;8189:6;8184:3;8177:4;8170:5;8166:16;8144:52;:::i;:::-;8221:29;8243:6;8221:29;:::i;:::-;8216:3;8212:39;8205:46;;7985:272;7893:364;;;;:::o;8263:366::-;8405:3;8426:67;8490:2;8485:3;8426:67;:::i;:::-;8419:74;;8502:93;8591:3;8502:93;:::i;:::-;8620:2;8615:3;8611:12;8604:19;;8263:366;;;:::o;8635:::-;8777:3;8798:67;8862:2;8857:3;8798:67;:::i;:::-;8791:74;;8874:93;8963:3;8874:93;:::i;:::-;8992:2;8987:3;8983:12;8976:19;;8635:366;;;:::o;9007:::-;9149:3;9170:67;9234:2;9229:3;9170:67;:::i;:::-;9163:74;;9246:93;9335:3;9246:93;:::i;:::-;9364:2;9359:3;9355:12;9348:19;;9007:366;;;:::o;9379:::-;9521:3;9542:67;9606:2;9601:3;9542:67;:::i;:::-;9535:74;;9618:93;9707:3;9618:93;:::i;:::-;9736:2;9731:3;9727:12;9720:19;;9379:366;;;:::o;9751:::-;9893:3;9914:67;9978:2;9973:3;9914:67;:::i;:::-;9907:74;;9990:93;10079:3;9990:93;:::i;:::-;10108:2;10103:3;10099:12;10092:19;;9751:366;;;:::o;10123:::-;10265:3;10286:67;10350:2;10345:3;10286:67;:::i;:::-;10279:74;;10362:93;10451:3;10362:93;:::i;:::-;10480:2;10475:3;10471:12;10464:19;;10123:366;;;:::o;10495:::-;10637:3;10658:67;10722:2;10717:3;10658:67;:::i;:::-;10651:74;;10734:93;10823:3;10734:93;:::i;:::-;10852:2;10847:3;10843:12;10836:19;;10495:366;;;:::o;10867:402::-;11027:3;11048:85;11130:2;11125:3;11048:85;:::i;:::-;11041:92;;11142:93;11231:3;11142:93;:::i;:::-;11260:2;11255:3;11251:12;11244:19;;10867:402;;;:::o;11275:366::-;11417:3;11438:67;11502:2;11497:3;11438:67;:::i;:::-;11431:74;;11514:93;11603:3;11514:93;:::i;:::-;11632:2;11627:3;11623:12;11616:19;;11275:366;;;:::o;11647:400::-;11807:3;11828:84;11910:1;11905:3;11828:84;:::i;:::-;11821:91;;11921:93;12010:3;11921:93;:::i;:::-;12039:1;12034:3;12030:11;12023:18;;11647:400;;;:::o;12053:366::-;12195:3;12216:67;12280:2;12275:3;12216:67;:::i;:::-;12209:74;;12292:93;12381:3;12292:93;:::i;:::-;12410:2;12405:3;12401:12;12394:19;;12053:366;;;:::o;12425:::-;12567:3;12588:67;12652:2;12647:3;12588:67;:::i;:::-;12581:74;;12664:93;12753:3;12664:93;:::i;:::-;12782:2;12777:3;12773:12;12766:19;;12425:366;;;:::o;12797:::-;12939:3;12960:67;13024:2;13019:3;12960:67;:::i;:::-;12953:74;;13036:93;13125:3;13036:93;:::i;:::-;13154:2;13149:3;13145:12;13138:19;;12797:366;;;:::o;13169:::-;13311:3;13332:67;13396:2;13391:3;13332:67;:::i;:::-;13325:74;;13408:93;13497:3;13408:93;:::i;:::-;13526:2;13521:3;13517:12;13510:19;;13169:366;;;:::o;13541:::-;13683:3;13704:67;13768:2;13763:3;13704:67;:::i;:::-;13697:74;;13780:93;13869:3;13780:93;:::i;:::-;13898:2;13893:3;13889:12;13882:19;;13541:366;;;:::o;13913:118::-;14000:24;14018:5;14000:24;:::i;:::-;13995:3;13988:37;13913:118;;:::o;14037:112::-;14120:22;14136:5;14120:22;:::i;:::-;14115:3;14108:35;14037:112;;:::o;14155:397::-;14295:3;14310:75;14381:3;14372:6;14310:75;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14423:75;14494:3;14485:6;14423:75;:::i;:::-;14523:2;14518:3;14514:12;14507:19;;14543:3;14536:10;;14155:397;;;;;:::o;14558:929::-;14900:3;14922:148;15066:3;14922:148;:::i;:::-;14915:155;;15080:75;15151:3;15142:6;15080:75;:::i;:::-;15180:2;15175:3;15171:12;15164:19;;15193:75;15264:3;15255:6;15193:75;:::i;:::-;15293:2;15288:3;15284:12;15277:19;;15313:148;15457:3;15313:148;:::i;:::-;15306:155;;15478:3;15471:10;;14558:929;;;;;:::o;15493:222::-;15586:4;15624:2;15613:9;15609:18;15601:26;;15637:71;15705:1;15694:9;15690:17;15681:6;15637:71;:::i;:::-;15493:222;;;;:::o;15721:254::-;15830:4;15868:2;15857:9;15853:18;15845:26;;15881:87;15965:1;15954:9;15950:17;15941:6;15881:87;:::i;:::-;15721:254;;;;:::o;15981:807::-;16230:4;16268:3;16257:9;16253:19;16245:27;;16282:71;16350:1;16339:9;16335:17;16326:6;16282:71;:::i;:::-;16363:72;16431:2;16420:9;16416:18;16407:6;16363:72;:::i;:::-;16445:80;16521:2;16510:9;16506:18;16497:6;16445:80;:::i;:::-;16535;16611:2;16600:9;16596:18;16587:6;16535:80;:::i;:::-;16625:73;16693:3;16682:9;16678:19;16669:6;16625:73;:::i;:::-;16708;16776:3;16765:9;16761:19;16752:6;16708:73;:::i;:::-;15981:807;;;;;;;;;:::o;16794:210::-;16881:4;16919:2;16908:9;16904:18;16896:26;;16932:65;16994:1;16983:9;16979:17;16970:6;16932:65;:::i;:::-;16794:210;;;;:::o;17010:252::-;17118:4;17156:2;17145:9;17141:18;17133:26;;17169:86;17252:1;17241:9;17237:17;17228:6;17169:86;:::i;:::-;17010:252;;;;:::o;17268:276::-;17388:4;17426:2;17415:9;17411:18;17403:26;;17439:98;17534:1;17523:9;17519:17;17510:6;17439:98;:::i;:::-;17268:276;;;;:::o;17550:313::-;17663:4;17701:2;17690:9;17686:18;17678:26;;17750:9;17744:4;17740:20;17736:1;17725:9;17721:17;17714:47;17778:78;17851:4;17842:6;17778:78;:::i;:::-;17770:86;;17550:313;;;;:::o;17869:419::-;18035:4;18073:2;18062:9;18058:18;18050:26;;18122:9;18116:4;18112:20;18108:1;18097:9;18093:17;18086:47;18150:131;18276:4;18150:131;:::i;:::-;18142:139;;17869:419;;;:::o;18294:::-;18460:4;18498:2;18487:9;18483:18;18475:26;;18547:9;18541:4;18537:20;18533:1;18522:9;18518:17;18511:47;18575:131;18701:4;18575:131;:::i;:::-;18567:139;;18294:419;;;:::o;18719:::-;18885:4;18923:2;18912:9;18908:18;18900:26;;18972:9;18966:4;18962:20;18958:1;18947:9;18943:17;18936:47;19000:131;19126:4;19000:131;:::i;:::-;18992:139;;18719:419;;;:::o;19144:::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19144:419;;;:::o;19569:::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19822:9;19816:4;19812:20;19808:1;19797:9;19793:17;19786:47;19850:131;19976:4;19850:131;:::i;:::-;19842:139;;19569:419;;;:::o;19994:::-;20160:4;20198:2;20187:9;20183:18;20175:26;;20247:9;20241:4;20237:20;20233:1;20222:9;20218:17;20211:47;20275:131;20401:4;20275:131;:::i;:::-;20267:139;;19994:419;;;:::o;20419:::-;20585:4;20623:2;20612:9;20608:18;20600:26;;20672:9;20666:4;20662:20;20658:1;20647:9;20643:17;20636:47;20700:131;20826:4;20700:131;:::i;:::-;20692:139;;20419:419;;;:::o;20844:::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21097:9;21091:4;21087:20;21083:1;21072:9;21068:17;21061:47;21125:131;21251:4;21125:131;:::i;:::-;21117:139;;20844:419;;;:::o;21269:::-;21435:4;21473:2;21462:9;21458:18;21450:26;;21522:9;21516:4;21512:20;21508:1;21497:9;21493:17;21486:47;21550:131;21676:4;21550:131;:::i;:::-;21542:139;;21269:419;;;:::o;21694:::-;21860:4;21898:2;21887:9;21883:18;21875:26;;21947:9;21941:4;21937:20;21933:1;21922:9;21918:17;21911:47;21975:131;22101:4;21975:131;:::i;:::-;21967:139;;21694:419;;;:::o;22119:::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22119:419;;;:::o;22544:::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22544:419;;;:::o;22969:::-;23135:4;23173:2;23162:9;23158:18;23150:26;;23222:9;23216:4;23212:20;23208:1;23197:9;23193:17;23186:47;23250:131;23376:4;23250:131;:::i;:::-;23242:139;;22969:419;;;:::o;23394:222::-;23487:4;23525:2;23514:9;23510:18;23502:26;;23538:71;23606:1;23595:9;23591:17;23582:6;23538:71;:::i;:::-;23394:222;;;;:::o;23622:483::-;23793:4;23831:2;23820:9;23816:18;23808:26;;23844:71;23912:1;23901:9;23897:17;23888:6;23844:71;:::i;:::-;23962:9;23956:4;23952:20;23947:2;23936:9;23932:18;23925:48;23990:108;24093:4;24084:6;23990:108;:::i;:::-;23982:116;;23622:483;;;;;:::o;24111:847::-;24382:4;24420:3;24409:9;24405:19;24397:27;;24434:71;24502:1;24491:9;24487:17;24478:6;24434:71;:::i;:::-;24515:80;24591:2;24580:9;24576:18;24567:6;24515:80;:::i;:::-;24642:9;24636:4;24632:20;24627:2;24616:9;24612:18;24605:48;24670:108;24773:4;24764:6;24670:108;:::i;:::-;24662:116;;24788:80;24864:2;24853:9;24849:18;24840:6;24788:80;:::i;:::-;24878:73;24946:3;24935:9;24931:19;24922:6;24878:73;:::i;:::-;24111:847;;;;;;;;:::o;24964:332::-;25085:4;25123:2;25112:9;25108:18;25100:26;;25136:71;25204:1;25193:9;25189:17;25180:6;25136:71;:::i;:::-;25217:72;25285:2;25274:9;25270:18;25261:6;25217:72;:::i;:::-;24964:332;;;;;:::o;25302:214::-;25391:4;25429:2;25418:9;25414:18;25406:26;;25442:67;25506:1;25495:9;25491:17;25482:6;25442:67;:::i;:::-;25302:214;;;;:::o;25603:132::-;25670:4;25693:3;25685:11;;25723:4;25718:3;25714:14;25706:22;;25603:132;;;:::o;25741:114::-;25808:6;25842:5;25836:12;25826:22;;25741:114;;;:::o;25861:99::-;25913:6;25947:5;25941:12;25931:22;;25861:99;;;:::o;25966:113::-;26036:4;26068;26063:3;26059:14;26051:22;;25966:113;;;:::o;26085:184::-;26184:11;26218:6;26213:3;26206:19;26258:4;26253:3;26249:14;26234:29;;26085:184;;;;:::o;26275:169::-;26359:11;26393:6;26388:3;26381:19;26433:4;26428:3;26424:14;26409:29;;26275:169;;;;:::o;26450:148::-;26552:11;26589:3;26574:18;;26450:148;;;;:::o;26604:305::-;26644:3;26663:20;26681:1;26663:20;:::i;:::-;26658:25;;26697:20;26715:1;26697:20;:::i;:::-;26692:25;;26851:1;26783:66;26779:74;26776:1;26773:81;26770:107;;;26857:18;;:::i;:::-;26770:107;26901:1;26898;26894:9;26887:16;;26604:305;;;;:::o;26915:185::-;26955:1;26972:20;26990:1;26972:20;:::i;:::-;26967:25;;27006:20;27024:1;27006:20;:::i;:::-;27001:25;;27045:1;27035:35;;27050:18;;:::i;:::-;27035:35;27092:1;27089;27085:9;27080:14;;26915:185;;;;:::o;27106:848::-;27167:5;27174:4;27198:6;27189:15;;27222:5;27213:14;;27236:712;27257:1;27247:8;27244:15;27236:712;;;27352:4;27347:3;27343:14;27337:4;27334:24;27331:50;;;27361:18;;:::i;:::-;27331:50;27411:1;27401:8;27397:16;27394:451;;;27826:4;27819:5;27815:16;27806:25;;27394:451;27876:4;27870;27866:15;27858:23;;27906:32;27929:8;27906:32;:::i;:::-;27894:44;;27236:712;;;27106:848;;;;;;;:::o;27960:281::-;28018:5;28042:23;28060:4;28042:23;:::i;:::-;28034:31;;28086:25;28102:8;28086:25;:::i;:::-;28074:37;;28130:104;28167:66;28157:8;28151:4;28130:104;:::i;:::-;28121:113;;27960:281;;;;:::o;28247:1073::-;28301:5;28492:8;28482:40;;28513:1;28504:10;;28515:5;;28482:40;28541:4;28531:36;;28558:1;28549:10;;28560:5;;28531:36;28627:4;28675:1;28670:27;;;;28711:1;28706:191;;;;28620:277;;28670:27;28688:1;28679:10;;28690:5;;;28706:191;28751:3;28741:8;28738:17;28735:43;;;28758:18;;:::i;:::-;28735:43;28807:8;28804:1;28800:16;28791:25;;28842:3;28835:5;28832:14;28829:40;;;28849:18;;:::i;:::-;28829:40;28882:5;;;28620:277;;29006:2;28996:8;28993:16;28987:3;28981:4;28978:13;28974:36;28956:2;28946:8;28943:16;28938:2;28932:4;28929:12;28925:35;28909:111;28906:246;;;29062:8;29056:4;29052:19;29043:28;;29097:3;29090:5;29087:14;29084:40;;;29104:18;;:::i;:::-;29084:40;29137:5;;28906:246;29177:42;29215:3;29205:8;29199:4;29196:1;29177:42;:::i;:::-;29162:57;;;;29251:4;29246:3;29242:14;29235:5;29232:25;29229:51;;;29260:18;;:::i;:::-;29229:51;29309:4;29302:5;29298:16;29289:25;;28247:1073;;;;;;:::o;29326:348::-;29366:7;29389:20;29407:1;29389:20;:::i;:::-;29384:25;;29423:20;29441:1;29423:20;:::i;:::-;29418:25;;29611:1;29543:66;29539:74;29536:1;29533:81;29528:1;29521:9;29514:17;29510:105;29507:131;;;29618:18;;:::i;:::-;29507:131;29666:1;29663;29659:9;29648:20;;29326:348;;;;:::o;29680:191::-;29720:4;29740:20;29758:1;29740:20;:::i;:::-;29735:25;;29774:20;29792:1;29774:20;:::i;:::-;29769:25;;29813:1;29810;29807:8;29804:34;;;29818:18;;:::i;:::-;29804:34;29863:1;29860;29856:9;29848:17;;29680:191;;;;:::o;29877:96::-;29914:7;29943:24;29961:5;29943:24;:::i;:::-;29932:35;;29877:96;;;:::o;29979:104::-;30024:7;30053:24;30071:5;30053:24;:::i;:::-;30042:35;;29979:104;;;:::o;30089:90::-;30123:7;30166:5;30159:13;30152:21;30141:32;;30089:90;;;:::o;30185:77::-;30222:7;30251:5;30240:16;;30185:77;;;:::o;30268:126::-;30305:7;30345:42;30338:5;30334:54;30323:65;;30268:126;;;:::o;30400:77::-;30437:7;30466:5;30455:16;;30400:77;;;:::o;30483:86::-;30518:7;30558:4;30551:5;30547:16;30536:27;;30483:86;;;:::o;30575:134::-;30633:9;30666:37;30697:5;30666:37;:::i;:::-;30653:50;;30575:134;;;:::o;30715:141::-;30780:9;30813:37;30844:5;30813:37;:::i;:::-;30800:50;;30715:141;;;:::o;30862:153::-;30939:9;30972:37;31003:5;30972:37;:::i;:::-;30959:50;;30862:153;;;:::o;31021:121::-;31079:9;31112:24;31130:5;31112:24;:::i;:::-;31099:37;;31021:121;;;:::o;31148:126::-;31198:9;31231:37;31262:5;31231:37;:::i;:::-;31218:50;;31148:126;;;:::o;31280:113::-;31330:9;31363:24;31381:5;31363:24;:::i;:::-;31350:37;;31280:113;;;:::o;31399:307::-;31467:1;31477:113;31491:6;31488:1;31485:13;31477:113;;;31576:1;31571:3;31567:11;31561:18;31557:1;31552:3;31548:11;31541:39;31513:2;31510:1;31506:10;31501:15;;31477:113;;;31608:6;31605:1;31602:13;31599:101;;;31688:1;31679:6;31674:3;31670:16;31663:27;31599:101;31448:258;31399:307;;;:::o;31712:320::-;31756:6;31793:1;31787:4;31783:12;31773:22;;31840:1;31834:4;31830:12;31861:18;31851:81;;31917:4;31909:6;31905:17;31895:27;;31851:81;31979:2;31971:6;31968:14;31948:18;31945:38;31942:84;;;31998:18;;:::i;:::-;31942:84;31763:269;31712:320;;;:::o;32038:100::-;32077:7;32106:26;32126:5;32106:26;:::i;:::-;32095:37;;32038:100;;;:::o;32144:79::-;32183:7;32212:5;32201:16;;32144:79;;;:::o;32229:94::-;32268:7;32297:20;32311:5;32297:20;:::i;:::-;32286:31;;32229:94;;;:::o;32329:180::-;32377:77;32374:1;32367:88;32474:4;32471:1;32464:15;32498:4;32495:1;32488:15;32515:180;32563:77;32560:1;32553:88;32660:4;32657:1;32650:15;32684:4;32681:1;32674:15;32701:180;32749:77;32746:1;32739:88;32846:4;32843:1;32836:15;32870:4;32867:1;32860:15;32887:180;32935:77;32932:1;32925:88;33032:4;33029:1;33022:15;33056:4;33053:1;33046:15;33073:180;33121:77;33118:1;33111:88;33218:4;33215:1;33208:15;33242:4;33239:1;33232:15;33382:117;33491:1;33488;33481:12;33505:102;33546:6;33597:2;33593:7;33588:2;33581:5;33577:14;33573:28;33563:38;;33505:102;;;:::o;33613:94::-;33646:8;33694:5;33690:2;33686:14;33665:35;;33613:94;;;:::o;33713:102::-;33755:8;33802:5;33799:1;33795:13;33774:34;;33713:102;;;:::o;33821:222::-;33961:34;33957:1;33949:6;33945:14;33938:58;34030:5;34025:2;34017:6;34013:15;34006:30;33821:222;:::o;34049:225::-;34189:34;34185:1;34177:6;34173:14;34166:58;34258:8;34253:2;34245:6;34241:15;34234:33;34049:225;:::o;34280:221::-;34420:34;34416:1;34408:6;34404:14;34397:58;34489:4;34484:2;34476:6;34472:15;34465:29;34280:221;:::o;34507:::-;34647:34;34643:1;34635:6;34631:14;34624:58;34716:4;34711:2;34703:6;34699:15;34692:29;34507:221;:::o;34734:238::-;34874:34;34870:1;34862:6;34858:14;34851:58;34943:21;34938:2;34930:6;34926:15;34919:46;34734:238;:::o;34978:224::-;35118:34;35114:1;35106:6;35102:14;35095:58;35187:7;35182:2;35174:6;35170:15;35163:32;34978:224;:::o;35208:180::-;35348:32;35344:1;35336:6;35332:14;35325:56;35208:180;:::o;35394:214::-;35534:66;35530:1;35522:6;35518:14;35511:90;35394:214;:::o;35614:175::-;35754:27;35750:1;35742:6;35738:14;35731:51;35614:175;:::o;35795:214::-;35935:66;35931:1;35923:6;35919:14;35912:90;35795:214;:::o;36015:182::-;36155:34;36151:1;36143:6;36139:14;36132:58;36015:182;:::o;36203:228::-;36343:34;36339:1;36331:6;36327:14;36320:58;36412:11;36407:2;36399:6;36395:15;36388:36;36203:228;:::o;36437:224::-;36577:34;36573:1;36565:6;36561:14;36554:58;36646:7;36641:2;36633:6;36629:15;36622:32;36437:224;:::o;36667:223::-;36807:34;36803:1;36795:6;36791:14;36784:58;36876:6;36871:2;36863:6;36859:15;36852:31;36667:223;:::o;36896:180::-;37036:32;37032:1;37024:6;37020:14;37013:56;36896:180;:::o;37082:122::-;37155:24;37173:5;37155:24;:::i;:::-;37148:5;37145:35;37135:63;;37194:1;37191;37184:12;37135:63;37082:122;:::o;37210:138::-;37291:32;37317:5;37291:32;:::i;:::-;37284:5;37281:43;37271:71;;37338:1;37335;37328:12;37271:71;37210:138;:::o;37354:116::-;37424:21;37439:5;37424:21;:::i;:::-;37417:5;37414:32;37404:60;;37460:1;37457;37450:12;37404:60;37354:116;:::o;37476:122::-;37549:24;37567:5;37549:24;:::i;:::-;37542:5;37539:35;37529:63;;37588:1;37585;37578:12;37529:63;37476:122;:::o
Swarm Source
ipfs://10f4270723324f7f70caee9ec3cf016a9ca8b44939543b0734ea4e85100602c0
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.