Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
TimeWarpPool
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/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; address private _pendingOwner; 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 returns (address) { return _owner; } /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view returns (address) { return _pendingOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called by any account other than the pending owner. */ modifier onlyPendingOwner() { require(pendingOwner() == _msgSender(), "Ownable: caller is not the pending owner"); _; } function transferOwnership(address newOwner) external onlyOwner { _pendingOwner = newOwner; } function claimOwnership() external onlyPendingOwner { _owner = _pendingOwner; _pendingOwner = address(0); emit OwnershipTransferred(_owner, _pendingOwner); } }
// 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; import "./access/Ownable.sol"; import "./interfaces/IERC20.sol"; import "./utils/token/SafeERC20.sol"; import "./StakingLocks.sol"; contract TimeWarpPool is Ownable, StakingLocks { event Deposit(LockType _lockType, uint256 _amount, uint256 _amountStacked); event Withdraw(uint256 _amount, uint256 _amountWithdraw); event Harvest(LockType _lockType, uint256 _amount, uint32 _lastRewardIndex); event Compound(LockType _lockType, uint256 _amount, uint32 _lastRewardIndex); event RewardPay(uint256 _amount, uint256 _accumulatedFee); using SafeERC20 for IERC20; IERC20 public erc20Deposit; IERC20 public erc20Reward; bool private initialized; bool private unlockAll; uint256 public accumulatedFee; uint256 public depositFeePercent = 0; uint256 public depositFeePrecision = 1000; uint256 public withdrawFeePercent = 0; uint256 public withdrawFeePrecision = 1000; uint8 public constant MAX_LOOPS = 100; uint256 public precision = 10000000000; uint32 public lastReward; struct Reward { uint256 amount; uint256 totalStacked; } // -------------- New -------------- mapping(address => LockType) public userLock; mapping(address => uint256) public userStacked; mapping(address => uint256) public expirationDeposit; mapping(address => uint32) public userLastReward; mapping(LockType => uint256) public totalStacked; mapping(LockType => mapping(uint32 => Reward)) public rewards; function init(address _erc20Deposit, address _erc20Reward) external onlyOwner { require(!initialized, "Initialized"); erc20Deposit = IERC20(_erc20Deposit); erc20Reward = IERC20(_erc20Reward); _initLocks(); initialized = true; } function setUnlockAll(bool _flag) external onlyOwner { unlockAll = _flag; } function setPrecision(uint256 _precision) external onlyOwner { precision = _precision; } function setDepositFee(uint256 _feePercent, uint256 _feePrecision) external onlyOwner { depositFeePercent = _feePercent; depositFeePrecision = _feePrecision; } function setWithdrawFee(uint256 _feePercent, uint256 _feePrecision) external onlyOwner { withdrawFeePercent = _feePercent; withdrawFeePrecision = _feePrecision; } function deposit(LockType _lockType, uint256 _amount, bool _comp) external { require(_amount > 0, "The amount of the deposit must not be zero"); require(erc20Deposit.allowance(_msgSender(), address(this)) >= _amount, "Not enough allowance"); LockType lastLock = userLock[_msgSender()]; require(lastLock == LockType.NULL || _lockType >= lastLock, "You cannot decrease the time of locking"); uint256 amountStacked; if (address(erc20Deposit) == address(erc20Reward)) { uint256 part = depositFeePercent * _amount / depositFeePrecision; amountStacked = _amount - part; accumulatedFee = accumulatedFee + part; } else { amountStacked = _amount; } erc20Deposit.safeTransferFrom(_msgSender(), address(this), _amount); if (_lockType >= lastLock) { (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); require(lastRewardIndex == lastReward, "We cannot get reward in one transaction"); if (amountReward > 0) { if (_comp && address(erc20Deposit) == address(erc20Reward)) { _compound(lastLock, amountReward, lastRewardIndex); } else { _harvest(lastLock, amountReward, lastRewardIndex); } } } userLock[_msgSender()] = _lockType; if (lastLock == LockType.NULL || _lockType == lastLock) { // If we deposit to current stacking period, or make first deposit userStacked[_msgSender()] = userStacked[_msgSender()] + amountStacked; totalStacked[_lockType] = totalStacked[_lockType] + amountStacked; } else if (_lockType > lastLock) { // If we increase stacking period totalStacked[lastLock] = totalStacked[lastLock] - userStacked[_msgSender()]; userStacked[_msgSender()] = userStacked[_msgSender()] + amountStacked; totalStacked[_lockType] = totalStacked[_lockType] + userStacked[_msgSender()]; } userLastReward[_msgSender()] = lastReward; if (lastLock == LockType.NULL || _lockType > lastLock) { // If we have first deposit, or increase lock time expirationDeposit[_msgSender()] = block.timestamp + locks[_lockType].period; } emit Deposit(_lockType, _amount, amountStacked); } function withdraw(uint256 amount) external { require(userStacked[_msgSender()] >= amount, "Withdrawal amount is more than balance"); require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require( block.timestamp > expirationDeposit[_msgSender()] || unlockAll, "Expiration time of the deposit is not over" ); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); require(lastRewardIndex == lastReward, "We cannot get reward in one transaction"); if (amountReward > 0) { _harvest(userLock[_msgSender()], amountReward, lastRewardIndex); } uint256 amountWithdraw; if (address(erc20Deposit) == address(erc20Reward)) { uint256 part = withdrawFeePercent * amount / withdrawFeePrecision; amountWithdraw = amount - part; accumulatedFee = accumulatedFee + part; } else { amountWithdraw = amount; } totalStacked[userLock[_msgSender()]] = totalStacked[userLock[_msgSender()]] - amount; userStacked[_msgSender()] = userStacked[_msgSender()] - amount; if (userStacked[_msgSender()] == 0) { userLock[_msgSender()] = LockType.NULL; } erc20Deposit.safeTransfer(_msgSender(), amountWithdraw); emit Withdraw(amount, amountWithdraw); } function reward(uint256 amount) external onlyOwner { require(amount > 0, "The amount of the reward must not be zero"); require(erc20Reward.allowance(_msgSender(), address(this)) >= amount, "Not enough allowance"); erc20Reward.safeTransferFrom(_msgSender(), address(this), amount); uint256 _stakedWithMultipliers = stakedWithMultipliers(); uint256 amountWithAccumFee = address(erc20Deposit) == address(erc20Reward) ? amount + accumulatedFee : amount; uint256 distributed; uint32 _lastReward = lastReward + 1; for (uint8 i = 0; i < lockTypes.length; i++) { if (i == lockTypes.length - 1) { uint256 remainder = amountWithAccumFee - distributed; rewards[lockTypes[i]][_lastReward] = Reward( remainder, totalStacked[lockTypes[i]] ); break; } uint256 staked = stakedWithMultiplier(lockTypes[i]); uint256 amountPart = staked * precision * amountWithAccumFee / _stakedWithMultipliers / precision; rewards[lockTypes[i]][_lastReward] = Reward( amountPart, totalStacked[lockTypes[i]] ); distributed += amountPart; } lastReward = _lastReward; emit RewardPay(amount, accumulatedFee); accumulatedFee = 0; } function compound() public { require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require(address(erc20Deposit) == address(erc20Reward), "Method not available"); require(userLastReward[_msgSender()] != lastReward, "You have no accumulated reward"); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); _compound(userLock[_msgSender()], amountReward, lastRewardIndex); } function harvest() public { require(userLock[_msgSender()] != LockType.NULL, "You do not have locked tokens"); require(userLastReward[_msgSender()] != lastReward, "You have no accumulated reward"); (uint256 amountReward, uint32 lastRewardIndex) = getReward(_msgSender(), 0); _harvest(userLock[_msgSender()], amountReward, lastRewardIndex); } function _compound(LockType _userLock, uint256 _amountReward, uint32 lastRewardIndex) internal { userStacked[_msgSender()] = userStacked[_msgSender()] + _amountReward; totalStacked[_userLock] = totalStacked[_userLock] + _amountReward; userLastReward[_msgSender()] = lastRewardIndex; emit Compound(_userLock, _amountReward, lastRewardIndex); } function _harvest(LockType _userLock, uint256 _amountReward, uint32 lastRewardIndex) internal { userLastReward[_msgSender()] = lastRewardIndex; erc20Reward.safeTransfer(_msgSender(), _amountReward); emit Harvest(_userLock, _amountReward, lastRewardIndex); } function stakedWithMultipliers() public view returns (uint256) { uint256 reserves; for (uint8 i = 0; i < lockTypes.length; i++) { reserves = reserves + stakedWithMultiplier(lockTypes[i]); } return reserves; } function totalStakedInPools() public view returns (uint256) { uint256 reserves; for (uint8 i = 0; i < lockTypes.length; i++) { reserves = reserves + totalStacked[lockTypes[i]]; } return reserves; } function stakedWithMultiplier(LockType _lockType) public view returns (uint256) { return totalStacked[_lockType] * locks[_lockType].multiplicator / 10; } function getReward(address _user, uint32 _lastRewardIndex) public view returns (uint256 amount, uint32 lastRewardIndex) { uint256 _amount; if (userLock[_user] == LockType.NULL) { return (0, lastReward); } uint32 rewardIterator = _lastRewardIndex != 0 ? _lastRewardIndex : userLastReward[_user]; uint32 maxRewardIterator = lastReward - rewardIterator > MAX_LOOPS ? rewardIterator + MAX_LOOPS : lastReward; while (rewardIterator < maxRewardIterator) { rewardIterator++; Reward memory reward = rewards[userLock[_user]][rewardIterator]; _amount = _amount + (userStacked[_user] * precision * reward.amount / reward.totalStacked / precision); } lastRewardIndex = rewardIterator; amount = _amount; } }
// 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 "../../interfaces/IERC20.sol"; import "../Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) {// Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; contract StakingLocks { enum LockType { NULL, HOURS1, DAYS30, DAYS180, DAYS365, DAYS730} LockType[5] lockTypes = [LockType.HOURS1, LockType.DAYS30, LockType.DAYS180, LockType.DAYS365, LockType.DAYS730]; struct LockData { uint32 period; uint8 multiplicator; // 11 factor is equal 1.1 } mapping(LockType => LockData) public locks; // All our locks function _initLocks() internal { locks[LockType.HOURS1] = LockData(1 hours, 10); locks[LockType.DAYS30] = LockData(30 days, 12); locks[LockType.DAYS180] = LockData(180 days, 13); locks[LockType.DAYS365] = LockData(365 days, 15); locks[LockType.DAYS730] = LockData(730 days, 20); } }
// 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); } } } }
//// Copyright (C) 2020 Zerion Inc. <https://zerion.io> //// //// This program is free software: you can redistribute it and/or modify //// it under the terms of the GNU General Public License as published by //// the Free Software Foundation, either version 3 of the License, or //// (at your option) any later version. //// //// This program is distributed in the hope that it will be useful, //// but WITHOUT ANY WARRANTY; without even the implied warranty of //// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //// GNU General Public License for more details. //// //// You should have received a copy of the GNU General Public License //// along with this program. If not, see <https://www.gnu.org/licenses/>. // //pragma solidity ^0.8.0; //pragma experimental ABIEncoderV2; // // ///** // * @title Protocol adapter interface. // * @dev adapterType(), tokenType(), and getBalance() functions MUST be implemented. // * @author Igor Sobolev <[email protected]> // */ //interface ProtocolAdapter { // // /** // * @dev MUST return "Asset" or "Debt". // * SHOULD be implemented by the public constant state variable. // */ // function adapterType() external pure returns (string memory); // // /** // * @dev MUST return token type (default is "ERC20"). // * SHOULD be implemented by the public constant state variable. // */ // function tokenType() external pure returns (string memory); // // /** // * @dev MUST return amount of the given token locked on the protocol by the given account. // */ // function getBalance(address token, address account) external view returns (uint256); //}
//// Copyright (C) 2020 Zerion Inc. <https://zerion.io> //// //// This program is free software: you can redistribute it and/or modify //// it under the terms of the GNU General Public License as published by //// the Free Software Foundation, either version 3 of the License, or //// (at your option) any later version. //// //// This program is distributed in the hope that it will be useful, //// but WITHOUT ANY WARRANTY; without even the implied warranty of //// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //// GNU General Public License for more details. //// //// You should have received a copy of the GNU General Public License //// along with this program. If not, see <https://www.gnu.org/licenses/>. // //pragma solidity ^0.8.0; //pragma experimental ABIEncoderV2; // //import {ERC20} from "./ERC20.sol"; //import {ProtocolAdapter} from "./interfaces/ProtocolAdapter.sol"; // // //interface ITimeWarpPool { // function userStacked(address) external view returns (uint256); //} // ///** // * @title Adapter for Time protocol (staking). // * @dev Implementation of ProtocolAdapter interface. // * @author Igor Sobolev <[email protected]> // */ //contract TimeEthLpStakingAdapter is ProtocolAdapter { // // string public constant adapterType = "Asset"; // // string public constant tokenType = "ERC20"; // // address internal constant TIME_ETH_LP = 0x1d474d4B4A62b0Ad0C819841eB2C74d1c5050524; // address internal constant STACKING_POOL_TIME_ETH_LP = 0x55c825983783c984890bA89F7d7C9575814D83F2; // // /** // * @return Amount of staked TIME tokens for a given account. // * @dev Implementation of ProtocolAdapter interface function. // */ // function getBalance(address token, address account) external view override returns (uint256) { // if (token != TIME_ETH_LP) return 0; // return ITimeWarpPool(STACKING_POOL_TIME_ETH_LP).userStacked(account); // } //}
//// Copyright (C) 2020 Zerion Inc. <https://zerion.io> //// //// This program is free software: you can redistribute it and/or modify //// it under the terms of the GNU General Public License as published by //// the Free Software Foundation, either version 3 of the License, or //// (at your option) any later version. //// //// This program is distributed in the hope that it will be useful, //// but WITHOUT ANY WARRANTY; without even the implied warranty of //// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //// GNU General Public License for more details. //// //// You should have received a copy of the GNU General Public License //// along with this program. If not, see <https://www.gnu.org/licenses/>. // //pragma solidity ^0.8.0; //pragma experimental ABIEncoderV2; // //import {ERC20} from "./ERC20.sol"; //import {ProtocolAdapter} from "./interfaces/ProtocolAdapter.sol"; // // //interface ITimeWarpPool { // function userStacked(address) external view returns (uint256); // // function userLastReward(address) external view returns (uint32); // // function getReward(address, uint32) external view returns (uint256, uint32); //} // ///** // * @title Adapter for Time protocol (staking). // * @dev Implementation of ProtocolAdapter interface. // * @author Igor Sobolev <[email protected]> // */ //contract TimeStakingAdapter is ProtocolAdapter { // // string public constant adapterType = "Asset"; // // string public constant tokenType = "ERC20"; // // address internal constant TIME = 0x6531f133e6DeeBe7F2dcE5A0441aA7ef330B4e53; // address internal constant STACKING_POOL_TIME = 0xa106dd3Bc6C42B3f28616FfAB615c7d494Eb629D; // // /** // * @return Amount of staked TIME tokens for a given account. // * @dev Implementation of ProtocolAdapter interface function. // */ // function getBalance(address token, address account) external view override returns (uint256) { // if (token != TIME) return 0; // uint256 totalBalance = 0; // totalBalance += ITimeWarpPool(STACKING_POOL_TIME).userStacked(account); // uint32 lastReward = ITimeWarpPool(STACKING_POOL_TIME).userLastReward(account); // (uint256 amount,) = ITimeWarpPool(STACKING_POOL_TIME).getReward(account, lastReward); // totalBalance += amount; // return totalBalance; // } //}
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountStacked","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"Harvest","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":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_accumulatedFee","type":"uint256"}],"name":"RewardPay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountWithdraw","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_LOOPS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accumulatedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_comp","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFeePrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Deposit","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Reward","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"expirationDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint32","name":"_lastRewardIndex","type":"uint32"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"lastRewardIndex","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Deposit","type":"address"},{"internalType":"address","name":"_erc20Reward","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastReward","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"name":"locks","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint8","name":"multiplicator","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalStacked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"},{"internalType":"uint256","name":"_feePrecision","type":"uint256"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_precision","type":"uint256"}],"name":"setPrecision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setUnlockAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"},{"internalType":"uint256","name":"_feePrecision","type":"uint256"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"_lockType","type":"uint8"}],"name":"stakedWithMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedWithMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"name":"totalStacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedInPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastReward","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLock","outputs":[{"internalType":"enum StakingLocks.LockType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeePrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060a00160405280600160058111156200004a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000083577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160026005811115620000c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115620000fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600360058111156200013c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000175577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160046005811115620001b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115620001ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016005808111156200022d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111562000266577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81525060029060056200027b92919062000367565b5060006007556103e860085560006009556103e8600a556402540be400600b55348015620002a857600080fd5b506000620002bb6200035f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200045d565b600033905090565b826005601f016020900481019282156200042b5791602002820160005b83821115620003fa57835183826101000a81548160ff02191690836005811115620003d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550926020019260010160208160000104928301926001030262000384565b8015620004295782816101000a81549060ff0219169055600101602081600001049283019260010302620003fa565b505b5090506200043a91906200043e565b5090565b5b80821115620004595760008160009055506001016200043f565b5090565b6155dd806200046d6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80639e3cf02e11610125578063d17f742a116100ad578063e8e85feb1161007c578063e8e85feb1461060b578063f09a401614610627578063f2fde38b14610643578063f69e20461461065f578063f8ce31641461066957610211565b8063d17f742a1461056f578063d3b5dc3b1461059f578063e30c3978146105bd578063e3139118146105db57610211565b8063c960e3ac116100f4578063c960e3ac146104b4578063c9b17149146104e4578063ca8689ee14610502578063cc1252ae14610520578063d03eb8611461053e57610211565b80639e3cf02e14610440578063a242dff21461045e578063a9fb763c1461047c578063b07d29c71461049857610211565b8063495ef705116101a85780637143e8c0116101775780637143e8c014610373578063725fd1a2146103a457806388c10f2a146103d45780638d50f59f146104045780638da5cb5b1461042257610211565b8063495ef705146102ff5780634e71e0c81461031d5780635617a6e8146103275780635dd862411461035757610211565b80632e1a7d4d116101e45780632e1a7d4d1461029d57806337a2eb71146102b95780634641257d146102d7578063469815c0146102e157610211565b80631002815914610216578063176f832e1461024757806322f7efcb146102635780632c686a941461027f575b600080fd5b610230600480360381019061022b919061466b565b610687565b60405161023e9291906150eb565b60405180910390f35b610261600480360381019061025c91906146a7565b6106b8565b005b61027d6004803603810190610278919061461c565b61073e565b005b61028761165d565b60405161029491906150d0565b60405180910390f35b6102b760048036038101906102b291906146a7565b611663565b005b6102c1611e08565b6040516102ce9190615181565b60405180910390f35b6102df611e0d565b005b6102e9612046565b6040516102f691906150d0565b60405180910390f35b610307612156565b60405161031491906150d0565b60405180910390f35b61032561215c565b005b610341600480360381019061033c9190614500565b61231a565b60405161034e9190614e25565b60405180910390f35b610371600480360381019061036c91906146f9565b61233a565b005b61038d60048036038101906103889190614565565b6123c8565b60405161039b929190615114565b60405180910390f35b6103be60048036038101906103b991906145f3565b612742565b6040516103cb91906150d0565b60405180910390f35b6103ee60048036038101906103e99190614500565b61275a565b6040516103fb91906150d0565b60405180910390f35b61040c612772565b6040516104199190614e0a565b60405180910390f35b61042a612798565b6040516104379190614d66565b60405180910390f35b6104486127c1565b6040516104559190614e0a565b60405180910390f35b6104666127e7565b60405161047391906150d0565b60405180910390f35b610496600480360381019061049191906146a7565b6127ed565b005b6104b260048036038101906104ad91906145a1565b612ffe565b005b6104ce60048036038101906104c991906145f3565b613097565b6040516104db91906150d0565b60405180910390f35b6104ec6131d1565b6040516104f9919061513d565b60405180910390f35b61050a6131e7565b60405161051791906150d0565b60405180910390f35b61052861327c565b60405161053591906150d0565b60405180910390f35b610558600480360381019061055391906145f3565b613282565b604051610566929190615158565b60405180910390f35b61058960048036038101906105849190614500565b6132c3565b604051610596919061513d565b60405180910390f35b6105a76132e6565b6040516105b491906150d0565b60405180910390f35b6105c56132ec565b6040516105d29190614d66565b60405180910390f35b6105f560048036038101906105f09190614500565b613316565b60405161060291906150d0565b60405180910390f35b610625600480360381019061062091906146f9565b61332e565b005b610641600480360381019061063c9190614529565b6133bc565b005b61065d60048036038101906106589190614500565b613531565b005b6106676135f1565b005b6106716138dc565b60405161067e91906150d0565b60405180910390f35b6012602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6106c06138e2565b73ffffffffffffffffffffffffffffffffffffffff166106de612798565b73ffffffffffffffffffffffffffffffffffffffff1614610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90614f90565b60405180910390fd5b80600b8190555050565b60008211610781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610778906150b0565b60405180910390fd5b81600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6107c86138e2565b306040518363ffffffff1660e01b81526004016107e6929190614d81565b60206040518083038186803b1580156107fe57600080fd5b505afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083691906146d0565b1015610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e90614fd0565b60405180910390fd5b6000600d60006108856138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060006005811115610909577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816005811115610942577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14806109be5750806005811115610982577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8460058111156109bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10155b6109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490614f50565b60405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610abe57600060085485600754610a8a919061528f565b610a94919061525e565b90508085610aa291906152e9565b915080600654610ab291906151ce565b60068190555050610ac2565b8390505b610b18610acd6138e2565b3086600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138ea909392919063ffffffff16565b816005811115610b51577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610b8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b10610cb257600080610ba4610b9d6138e2565b60006123c8565b91509150600c60009054906101000a900463ffffffff1663ffffffff168163ffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614ed0565b60405180910390fd5b6000821115610caf57848015610c8d5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610ca257610c9d848383613973565b610cae565b610cad848383613bca565b5b5b50505b84600d6000610cbf6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115610d41577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060006005811115610d80577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b826005811115610db9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480610e345750816005811115610df9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115610e32577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b15610ff05780600e6000610e466138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e8b91906151ce565b600e6000610e976138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060116000876005811115610f13577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610f4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054610f6491906151ce565b60116000876005811115610fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115610fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055506113be565b816005811115611029577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115611062577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b11156113bd57600e60006110746138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008460058111156110ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611124577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461113d91906152e9565b6011600084600581111561117a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156111b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555080600e60006111d16138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461121691906151ce565b600e60006112226138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e600061126c6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008760058111156112e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111561131c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000205461133591906151ce565b60116000876005811115611372577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156113aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055505b5b600c60009054906101000a900463ffffffff16601060006113dd6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055506000600581111561146f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260058111156114a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b148061152357508160058111156114e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b856005811115611521577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b115b1561161b5760036000866005811115611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111561159d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16426115d091906151ce565b600f60006115dc6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b7fd42bb066022bc335a7416ea93e58076c615424965740cdeb2263132458823b1885858360405161164e93929190614e40565b60405180910390a15050505050565b60085481565b80600e60006116706138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390615090565b60405180910390fd5b60006005811115611726577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600d60006117326138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156117b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90614fb0565b60405180910390fd5b600f60006117ff6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544211806118535750600560159054906101000a900460ff165b611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990614f30565b60405180910390fd5b6000806118a76118a06138e2565b60006123c8565b91509150600c60009054906101000a900463ffffffff1663ffffffff168163ffffffff161461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614ed0565b60405180910390fd5b600082111561197357611972600d60006119236138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bca565b5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a34576000600a5485600954611a00919061528f565b611a0a919061525e565b90508085611a1891906152e9565b915080600654611a2891906151ce565b60068190555050611a38565b8390505b8360116000600d6000611a496138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611ac9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611b01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054611b1a91906152e9565b60116000600d6000611b2a6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115611be2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020019081526020016000208190555083600e6000611c016138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4691906152e9565b600e6000611c526138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600e6000611c9e6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611d75576000600d6000611ced6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836005811115611d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b611dc9611d806138e2565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc39092919063ffffffff16565b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c88482604051611dfa9291906150eb565b60405180910390a150505050565b606481565b60006005811115611e47577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600d6000611e536138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115611ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90614fb0565b60405180910390fd5b600c60009054906101000a900463ffffffff1663ffffffff1660106000611f396138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290615030565b60405180910390fd5b600080611fe0611fd96138e2565b60006123c8565b91509150612042600d6000611ff36138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613bca565b5050565b60008060005b60058160ff16101561214e576011600060028360ff1660058110612099577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff1660058111156120e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111561211f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548261213991906151ce565b915080806121469061545f565b91505061204c565b508091505090565b60095481565b6121646138e2565b73ffffffffffffffffffffffffffffffffffffffff166121826132ec565b73ffffffffffffffffffffffffffffffffffffffff16146121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf90615050565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b600d6020528060005260406000206000915054906101000a900460ff1681565b6123426138e2565b73ffffffffffffffffffffffffffffffffffffffff16612360612798565b73ffffffffffffffffffffffffffffffffffffffff16146123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad90614f90565b60405180910390fd5b81600781905550806008819055505050565b6000806000806005811115612406577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600581111561248b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156124b0576000600c60009054906101000a900463ffffffff16925092505061273b565b6000808563ffffffff16141561251557601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16612517565b845b90506000606460ff1682600c60009054906101000a900463ffffffff1661253e919061531d565b63ffffffff161161256157600c60009054906101000a900463ffffffff16612572565b606460ff16826125719190615224565b5b90505b8063ffffffff168263ffffffff16101561273157818061259490615432565b925050600060126000600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166005811115612622577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581111561265a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008463ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600b5481602001518260000151600b54600e60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612700919061528f565b61270a919061528f565b612714919061525e565b61271e919061525e565b8461272991906151ce565b935050612575565b8193508294505050505b9250929050565b60116020528060005260406000206000915090505481565b600f6020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6127f56138e2565b73ffffffffffffffffffffffffffffffffffffffff16612813612798565b73ffffffffffffffffffffffffffffffffffffffff1614612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090614f90565b60405180910390fd5b600081116128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614f70565b60405180910390fd5b80600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6128f36138e2565b306040518363ffffffff1660e01b8152600401612911929190614d81565b60206040518083038186803b15801561292957600080fd5b505afa15801561293d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296191906146d0565b10156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614fd0565b60405180910390fd5b6129f86129ad6138e2565b3083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166138ea909392919063ffffffff16565b6000612a026131e7565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a835782612a92565b60065483612a9191906151ce565b5b90506000806001600c60009054906101000a900463ffffffff16612ab69190615224565b905060005b60058160ff161015612f925760016005612ad591906152e9565b8160ff161415612ce85760008385612aed91906152e9565b905060405180604001604052808281526020016011600060028660ff1660058110612b41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612b8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612bc7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506012600060028560ff1660058110612c1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612c68577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612ca0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008563ffffffff1663ffffffff168152602001908152602001600020600082015181600001556020820151816001015590505050612f92565b6000612d4560028360ff1660058110612d2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16613097565b90506000600b548787600b5485612d5c919061528f565b612d66919061528f565b612d70919061525e565b612d7a919061525e565b905060405180604001604052808281526020016011600060028760ff1660058110612dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612e1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612e54577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020548152506012600060028660ff1660058110612ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff166005811115612ef5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115612f2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508085612f7b91906151ce565b945050508080612f8a9061545f565b915050612abb565b5080600c60006101000a81548163ffffffff021916908363ffffffff1602179055507f511bb6e9e69d3477c8790b56d57c156144c962089ae6cd11d828109fb56cffe285600654604051612fe79291906150eb565b60405180910390a160006006819055505050505050565b6130066138e2565b73ffffffffffffffffffffffffffffffffffffffff16613024612798565b73ffffffffffffffffffffffffffffffffffffffff161461307a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307190614f90565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b6000600a600360008460058111156130d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613110577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060000160049054906101000a900460ff1660ff166011600085600581111561316f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156131a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020546131c0919061528f565b6131ca919061525e565b9050919050565b600c60009054906101000a900463ffffffff1681565b60008060005b60058160ff1610156132745761325460028260ff1660058110613239577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602091828204019190069054906101000a900460ff16613097565b8261325f91906151ce565b9150808061326c9061545f565b9150506131ed565b508091505090565b60075481565b60036020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900460ff16905082565b60106020528060005260406000206000915054906101000a900463ffffffff1681565b600b5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e6020528060005260406000206000915090505481565b6133366138e2565b73ffffffffffffffffffffffffffffffffffffffff16613354612798565b73ffffffffffffffffffffffffffffffffffffffff16146133aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a190614f90565b60405180910390fd5b8160098190555080600a819055505050565b6133c46138e2565b73ffffffffffffffffffffffffffffffffffffffff166133e2612798565b73ffffffffffffffffffffffffffffffffffffffff1614613438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342f90614f90565b60405180910390fd5b600560149054906101000a900460ff1615613488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347f90615010565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613512613d49565b6001600560146101000a81548160ff0219169083151502179055505050565b6135396138e2565b73ffffffffffffffffffffffffffffffffffffffff16613557612798565b73ffffffffffffffffffffffffffffffffffffffff16146135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a490614f90565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600581111561362b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600d60006136376138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660058111156136b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ef90614fb0565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146137aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a190614ef0565b60405180910390fd5b600c60009054906101000a900463ffffffff1663ffffffff16601060006137cf6138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161415613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385890615030565b60405180910390fd5b60008061387661386f6138e2565b60006123c8565b915091506138d8600d60006138896138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168383613973565b5050565b60065481565b600033905090565b61396d846323b872dd60e01b85858560405160240161390b93929190614daa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614200565b50505050565b81600e60006139806138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139c591906151ce565b600e60006139d16138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160116000856005811115613a4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002054613a9e91906151ce565b60116000856005811115613adb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613b13577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001908152602001600020819055508060106000613b326138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055507f99a2ce12b0e009e5696a913c2dd72b3b444cbf1741ffd3a9f241b9d71b364f23838383604051613bbd93929190614e77565b60405180910390a1505050565b8060106000613bd76138e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550613c83613c3a6138e2565b83600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613cc39092919063ffffffff16565b7f1cba73c85d3b8253c47ae88a86a3dce6e18d417d06ddbc156faff7a764041e2d838383604051613cb693929190614e77565b60405180910390a1505050565b613d448363a9059cbb60e01b8484604051602401613ce2929190614de1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614200565b505050565b6040518060400160405280610e1063ffffffff168152602001600a60ff168152506003600060016005811115613da8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613de0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062278d0063ffffffff168152602001600c60ff168152506003600060026005811115613e99577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050604051806040016040528062ed4e0063ffffffff168152602001600d60ff168152506003600060036005811115613f8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6005811115613fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806301e1338063ffffffff168152602001600f60ff16815250600360006004600581111561407c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156140b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff16021790555090505060405180604001604052806303c2670063ffffffff168152602001601460ff168152506003600060058081111561416d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60058111156141a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff021916908360ff160217905550905050565b6000614262826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166142c79092919063ffffffff16565b90506000815111156142c2578080602001905181019061428291906145ca565b6142c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b890615070565b60405180910390fd5b5b505050565b60606142d684846000856142df565b90509392505050565b606082471015614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b90614f10565b60405180910390fd5b61432d856143f3565b61436c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436390614ff0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516143959190614d4f565b60006040518083038185875af1925050503d80600081146143d2576040519150601f19603f3d011682016040523d82523d6000602084013e6143d7565b606091505b50915091506143e7828286614406565b92505050949350505050565b600080823b905060008111915050919050565b6060831561441657829050614466565b6000835111156144295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161445d9190614eae565b60405180910390fd5b9392505050565b60008135905061447c8161553b565b92915050565b60008135905061449181615552565b92915050565b6000815190506144a681615552565b92915050565b6000813590506144bb81615569565b92915050565b6000813590506144d081615579565b92915050565b6000815190506144e581615579565b92915050565b6000813590506144fa81615590565b92915050565b60006020828403121561451257600080fd5b60006145208482850161446d565b91505092915050565b6000806040838503121561453c57600080fd5b600061454a8582860161446d565b925050602061455b8582860161446d565b9150509250929050565b6000806040838503121561457857600080fd5b60006145868582860161446d565b9250506020614597858286016144eb565b9150509250929050565b6000602082840312156145b357600080fd5b60006145c184828501614482565b91505092915050565b6000602082840312156145dc57600080fd5b60006145ea84828501614497565b91505092915050565b60006020828403121561460557600080fd5b6000614613848285016144ac565b91505092915050565b60008060006060848603121561463157600080fd5b600061463f868287016144ac565b9350506020614650868287016144c1565b925050604061466186828701614482565b9150509250925092565b6000806040838503121561467e57600080fd5b600061468c858286016144ac565b925050602061469d858286016144eb565b9150509250929050565b6000602082840312156146b957600080fd5b60006146c7848285016144c1565b91505092915050565b6000602082840312156146e257600080fd5b60006146f0848285016144d6565b91505092915050565b6000806040838503121561470c57600080fd5b600061471a858286016144c1565b925050602061472b858286016144c1565b9150509250929050565b61473e81615351565b82525050565b600061474f8261519c565b61475981856151b2565b93506147698185602086016153ff565b80840191505092915050565b61477e816153c9565b82525050565b61478d816153ed565b82525050565b600061479e826151a7565b6147a881856151bd565b93506147b88185602086016153ff565b6147c181615516565b840191505092915050565b60006147d96027836151bd565b91507f57652063616e6e6f74206765742072657761726420696e206f6e65207472616e60008301527f73616374696f6e000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061483f6014836151bd565b91507f4d6574686f64206e6f7420617661696c61626c650000000000000000000000006000830152602082019050919050565b600061487f6026836151bd565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148e5602a836151bd565b91507f45787069726174696f6e2074696d65206f6620746865206465706f736974206960008301527f73206e6f74206f766572000000000000000000000000000000000000000000006020830152604082019050919050565b600061494b6027836151bd565b91507f596f752063616e6e6f74206465637265617365207468652074696d65206f662060008301527f6c6f636b696e67000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149b16029836151bd565b91507f54686520616d6f756e74206f662074686520726577617264206d757374206e6f60008301527f74206265207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a176020836151bd565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614a57601d836151bd565b91507f596f7520646f206e6f742068617665206c6f636b656420746f6b656e730000006000830152602082019050919050565b6000614a976014836151bd565b91507f4e6f7420656e6f75676820616c6c6f77616e63650000000000000000000000006000830152602082019050919050565b6000614ad7601d836151bd565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614b17600b836151bd565b91507f496e697469616c697a65640000000000000000000000000000000000000000006000830152602082019050919050565b6000614b57601e836151bd565b91507f596f752068617665206e6f20616363756d756c617465642072657761726400006000830152602082019050919050565b6000614b976028836151bd565b91507f4f776e61626c653a2063616c6c6572206973206e6f74207468652070656e646960008301527f6e67206f776e65720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614bfd602a836151bd565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c636026836151bd565b91507f5769746864726177616c20616d6f756e74206973206d6f7265207468616e206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cc9602a836151bd565b91507f54686520616d6f756e74206f6620746865206465706f736974206d757374206e60008301527f6f74206265207a65726f000000000000000000000000000000000000000000006020830152604082019050919050565b614d2b816153a2565b82525050565b614d3a816153ac565b82525050565b614d49816153bc565b82525050565b6000614d5b8284614744565b915081905092915050565b6000602082019050614d7b6000830184614735565b92915050565b6000604082019050614d966000830185614735565b614da36020830184614735565b9392505050565b6000606082019050614dbf6000830186614735565b614dcc6020830185614735565b614dd96040830184614d22565b949350505050565b6000604082019050614df66000830185614735565b614e036020830184614d22565b9392505050565b6000602082019050614e1f6000830184614775565b92915050565b6000602082019050614e3a6000830184614784565b92915050565b6000606082019050614e556000830186614784565b614e626020830185614d22565b614e6f6040830184614d22565b949350505050565b6000606082019050614e8c6000830186614784565b614e996020830185614d22565b614ea66040830184614d31565b949350505050565b60006020820190508181036000830152614ec88184614793565b905092915050565b60006020820190508181036000830152614ee9816147cc565b9050919050565b60006020820190508181036000830152614f0981614832565b9050919050565b60006020820190508181036000830152614f2981614872565b9050919050565b60006020820190508181036000830152614f49816148d8565b9050919050565b60006020820190508181036000830152614f698161493e565b9050919050565b60006020820190508181036000830152614f89816149a4565b9050919050565b60006020820190508181036000830152614fa981614a0a565b9050919050565b60006020820190508181036000830152614fc981614a4a565b9050919050565b60006020820190508181036000830152614fe981614a8a565b9050919050565b6000602082019050818103600083015261500981614aca565b9050919050565b6000602082019050818103600083015261502981614b0a565b9050919050565b6000602082019050818103600083015261504981614b4a565b9050919050565b6000602082019050818103600083015261506981614b8a565b9050919050565b6000602082019050818103600083015261508981614bf0565b9050919050565b600060208201905081810360008301526150a981614c56565b9050919050565b600060208201905081810360008301526150c981614cbc565b9050919050565b60006020820190506150e56000830184614d22565b92915050565b60006040820190506151006000830185614d22565b61510d6020830184614d22565b9392505050565b60006040820190506151296000830185614d22565b6151366020830184614d31565b9392505050565b60006020820190506151526000830184614d31565b92915050565b600060408201905061516d6000830185614d31565b61517a6020830184614d40565b9392505050565b60006020820190506151966000830184614d40565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006151d9826153a2565b91506151e4836153a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561521957615218615489565b5b828201905092915050565b600061522f826153ac565b915061523a836153ac565b92508263ffffffff0382111561525357615252615489565b5b828201905092915050565b6000615269826153a2565b9150615274836153a2565b925082615284576152836154b8565b5b828204905092915050565b600061529a826153a2565b91506152a5836153a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152de576152dd615489565b5b828202905092915050565b60006152f4826153a2565b91506152ff836153a2565b92508282101561531257615311615489565b5b828203905092915050565b6000615328826153ac565b9150615333836153ac565b92508282101561534657615345615489565b5b828203905092915050565b600061535c82615382565b9050919050565b60008115159050919050565b600081905061537d82615527565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006153d4826153db565b9050919050565b60006153e682615382565b9050919050565b60006153f88261536f565b9050919050565b60005b8381101561541d578082015181840152602081019050615402565b8381111561542c576000848401525b50505050565b600061543d826153ac565b915063ffffffff82141561545457615453615489565b5b600182019050919050565b600061546a826153bc565b915060ff82141561547e5761547d615489565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000601f19601f8301169050919050565b60068110615538576155376154e7565b5b50565b61554481615351565b811461554f57600080fd5b50565b61555b81615363565b811461556657600080fd5b50565b6006811061557657600080fd5b50565b615582816153a2565b811461558d57600080fd5b50565b615599816153ac565b81146155a457600080fd5b5056fea2646970667358221220b19cd5ea553df43440dfaad5dfebd46d342fdb98dc9d20770827d8ada5f146f064736f6c63430008000033
Deployed ByteCode Sourcemap
190:10534:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1488:61;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1926:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2405:2428;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;842:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4839:1411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;980:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8147:377;;;:::i;:::-;;9467:245;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;889:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1900:185:4;;;:::i;:::-;;1220:44:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2032:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9889:833;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1434:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;644:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1103:77:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;676:25:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;932:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6256:1412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1833:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9718:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1067:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9205:256;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;800:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;386:42:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1380:48:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1023:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1254:91:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1270:46:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2217:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1556:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1789:105:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7674:467:3;;;:::i;:::-;;765:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1488:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1926:100::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2009:10:3::1;1997:9;:22;;;;1926:100:::0;:::o;2405:2428::-;2508:1;2498:7;:11;2490:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2629:7;2574:12;;;;;;;;;;;:22;;;2597:12;:10;:12::i;:::-;2619:4;2574:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;2566:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:17;2691:8;:22;2700:12;:10;:12::i;:::-;2691:22;;;;;;;;;;;;;;;;;;;;;;;;;2671:42;;2743:13;2731:25;;;;;;;;;;;;;;;;:8;:25;;;;;;;;;;;;;;;;;:50;;;;2773:8;2760:21;;;;;;;;;;;;;;;;:9;:21;;;;;;;;;;;;;;;;;;2731:50;2723:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;2835:21;2903:11;;;;;;;;;;;2870:45;;2878:12;;;;;;;;;;;2870:45;;;2866:290;;;2931:12;2976:19;;2966:7;2946:17;;:27;;;;:::i;:::-;:49;;;;:::i;:::-;2931:64;;3035:4;3025:7;:14;;;;:::i;:::-;3009:30;;3087:4;3070:14;;:21;;;;:::i;:::-;3053:14;:38;;;;2866:290;;;;3138:7;3122:23;;2866:290;3166:67;3196:12;:10;:12::i;:::-;3218:4;3225:7;3166:12;;;;;;;;;;;:29;;;;:67;;;;;;:::i;:::-;3260:8;3247:21;;;;;;;;;;;;;;;;:9;:21;;;;;;;;;;;;;;;;;3243:536;;3285:20;3307:22;3333:26;3343:12;:10;:12::i;:::-;3357:1;3333:9;:26::i;:::-;3284:75;;;;3400:10;;;;;;;;;;;3381:29;;:15;:29;;;3373:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;3487:1;3472:12;:16;3468:301;;;3512:5;:54;;;;;3554:11;;;;;;;;;;;3521:45;;3529:12;;;;;;;;;;;3521:45;;;3512:54;3508:247;;;3590:50;3600:8;3610:12;3624:15;3590:9;:50::i;:::-;3508:247;;;3687:49;3696:8;3706:12;3720:15;3687:8;:49::i;:::-;3508:247;3468:301;3243:536;;;3813:9;3788:8;:22;3797:12;:10;:12::i;:::-;3788:22;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3848:13;3836:25;;;;;;;;;;;;;;;;:8;:25;;;;;;;;;;;;;;;;;:50;;;;3878:8;3865:21;;;;;;;;;;;;;;;;:9;:21;;;;;;;;;;;;;;;;;3836:50;3832:660;;;4037:13;4009:11;:25;4021:12;:10;:12::i;:::-;4009:25;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;3981:11;:25;3993:12;:10;:12::i;:::-;3981:25;;;;;;;;;;;;;;;:69;;;;4116:13;4090:12;:23;4103:9;4090:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;4064:12;:23;4077:9;4064:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;3832:660;;;4162:8;4150:20;;;;;;;;;;;;;;;;:9;:20;;;;;;;;;;;;;;;;;4146:346;;;4282:11;:25;4294:12;:10;:12::i;:::-;4282:25;;;;;;;;;;;;;;;;4257:12;:22;4270:8;4257:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;4232:12;:22;4245:8;4232:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:75;;;;4377:13;4349:11;:25;4361:12;:10;:12::i;:::-;4349:25;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;4321:11;:25;4333:12;:10;:12::i;:::-;4321:25;;;;;;;;;;;;;;;:69;;;;4456:11;:25;4468:12;:10;:12::i;:::-;4456:25;;;;;;;;;;;;;;;;4430:12;:23;4443:9;4430:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;4404:12;:23;4417:9;4404:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;4146:346;3832:660;4532:10;;;;;;;;;;;4501:14;:28;4516:12;:10;:12::i;:::-;4501:28;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;4568:13;4556:25;;;;;;;;;;;;;;;;:8;:25;;;;;;;;;;;;;;;;;:49;;;;4597:8;4585:20;;;;;;;;;;;;;;;;:9;:20;;;;;;;;;;;;;;;;;4556:49;4552:218;;;4736:5;:16;4742:9;4736:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;4718:41;;:15;:41;;;;:::i;:::-;4684:17;:31;4702:12;:10;:12::i;:::-;4684:31;;;;;;;;;;;;;;;:75;;;;4552:218;4784:42;4792:9;4803:7;4812:13;4784:42;;;;;;;;:::i;:::-;;;;;;;;2405:2428;;;;;:::o;842:41::-;;;;:::o;4839:1411::-;4929:6;4900:11;:25;4912:12;:10;:12::i;:::-;4900:25;;;;;;;;;;;;;;;;:35;;4892:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;5022:13;4996:39;;;;;;;;;;;;;;;;:8;:22;5005:12;:10;:12::i;:::-;4996:22;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4988:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5118:17;:31;5136:12;:10;:12::i;:::-;5118:31;;;;;;;;;;;;;;;;5100:15;:49;:62;;;;5153:9;;;;;;;;;;;5100:62;5079:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;5241:20;5263:22;5289:26;5299:12;:10;:12::i;:::-;5313:1;5289:9;:26::i;:::-;5240:75;;;;5352:10;;;;;;;;;;;5333:29;;:15;:29;;;5325:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5435:1;5420:12;:16;5416:110;;;5452:63;5461:8;:22;5470:12;:10;:12::i;:::-;5461:22;;;;;;;;;;;;;;;;;;;;;;;;;5485:12;5499:15;5452:8;:63::i;:::-;5416:110;5535:22;5604:11;;;;;;;;;;;5571:45;;5579:12;;;;;;;;;;;5571:45;;;5567:291;;;5632:12;5677:20;;5668:6;5647:18;;:27;;;;:::i;:::-;:50;;;;:::i;:::-;5632:65;;5737:4;5728:6;:13;;;;:::i;:::-;5711:30;;5789:4;5772:14;;:21;;;;:::i;:::-;5755:14;:38;;;;5567:291;;;;5841:6;5824:23;;5567:291;5945:6;5906:12;:36;5919:8;:22;5928:12;:10;:12::i;:::-;5919:22;;;;;;;;;;;;;;;;;;;;;;;;;5906:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;5867:12;:36;5880:8;:22;5889:12;:10;:12::i;:::-;5880:22;;;;;;;;;;;;;;;;;;;;;;;;;5867:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:84;;;;6017:6;5989:11;:25;6001:12;:10;:12::i;:::-;5989:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;5961:11;:25;5973:12;:10;:12::i;:::-;5961:25;;;;;;;;;;;;;;;:62;;;;6066:1;6037:11;:25;6049:12;:10;:12::i;:::-;6037:25;;;;;;;;;;;;;;;;:30;6033:99;;;6108:13;6083:8;:22;6092:12;:10;:12::i;:::-;6083:22;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6033:99;6141:55;6167:12;:10;:12::i;:::-;6181:14;6141:12;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;6211:32;6220:6;6228:14;6211:32;;;;;;;:::i;:::-;;;;;;;;4839:1411;;;;:::o;980:37::-;1014:3;980:37;:::o;8147:377::-;8217:13;8191:39;;;;;;;;;;;;;;;;:8;:22;8200:12;:10;:12::i;:::-;8191:22;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;8183:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8314:10;;;;;;;;;;;8282:42;;:14;:28;8297:12;:10;:12::i;:::-;8282:28;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;8274:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8370:20;8392:22;8418:26;8428:12;:10;:12::i;:::-;8442:1;8418:9;:26::i;:::-;8369:75;;;;8454:63;8463:8;:22;8472:12;:10;:12::i;:::-;8463:22;;;;;;;;;;;;;;;;;;;;;;;;;8487:12;8501:15;8454:8;:63::i;:::-;8147:377;;:::o;9467:245::-;9518:7;9537:16;9568:7;9563:118;9585:16;9581:1;:20;;;9563:118;;;9644:12;:26;9657:9;9667:1;9657:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9644:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9633:8;:37;;;;:::i;:::-;9622:48;;9603:3;;;;;:::i;:::-;;;;9563:118;;;;9697:8;9690:15;;;9467:245;:::o;889:37::-;;;;:::o;1900:185:4:-;1708:12;:10;:12::i;:::-;1690:30;;:14;:12;:14::i;:::-;:30;;;1682:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;1971:13:::1;;;;;;;;;;;1962:6;::::0;:22:::1;;;;;;;;;;;;;;;;;;2018:1;1994:13;;:26;;;;;;;;;;;;;;;;;;2064:13;;;;;;;;;;;2035:43;;2056:6;::::0;::::1;;;;;;;;2035:43;;;;;;;;;;;;1900:185::o:0;1220:44:3:-;;;;;;;;;;;;;;;;;;;;;;:::o;2032:179::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2148:11:3::1;2128:17;:31;;;;2191:13;2169:19;:35;;;;2032:179:::0;;:::o;9889:833::-;9969:14;9985:22;10019:15;10067:13;10048:32;;;;;;;;;;;;;;;;:8;:15;10057:5;10048:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;10044:85;;;10104:1;10107:10;;;;;;;;;;;10096:22;;;;;;;10044:85;10138:21;10182:1;10162:16;:21;;;;:64;;10205:14;:21;10220:5;10205:21;;;;;;;;;;;;;;;;;;;;;;;;;10162:64;;;10186:16;10162:64;10138:88;;10236:24;1014:3;10263:39;;10276:14;10263:10;;;;;;;;;;;:27;;;;:::i;:::-;:39;;;:97;;10350:10;;;;;;;;;;;10263:97;;;1014:3;10313:26;;:14;:26;;;;:::i;:::-;10263:97;10236:124;;10370:278;10394:17;10377:34;;:14;:34;;;10370:278;;;10427:16;;;;;:::i;:::-;;;;10457:20;10480:7;:24;10488:8;:15;10497:5;10488:15;;;;;;;;;;;;;;;;;;;;;;;;;10480:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;10505:14;10480:40;;;;;;;;;;;;;;;10457:63;;;;;;;;;;;;;;;;;;;;;;;;;;;10627:9;;10604:6;:19;;;10588:6;:13;;;10576:9;;10555:11;:18;10567:5;10555:18;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:46;;;;:::i;:::-;:68;;;;:::i;:::-;:81;;;;:::i;:::-;10544:7;:93;;;;:::i;:::-;10534:103;;10370:278;;;;10675:14;10657:32;;10708:7;10699:16;;9889:833;;;;;;;;;:::o;1434:48::-;;;;;;;;;;;;;;;;;:::o;1322:52::-;;;;;;;;;;;;;;;;;:::o;644:26::-;;;;;;;;;;;;;:::o;1103:77:4:-;1141:7;1167:6;;;;;;;;;;;1160:13;;1103:77;:::o;676:25:3:-;;;;;;;;;;;;;:::o;932:42::-;;;;:::o;6256:1412::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6334:1:3::1;6325:6;:10;6317:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6453:6;6399:11;;;;;;;;;;;:21;;;6421:12;:10;:12::i;:::-;6443:4;6399:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;6391:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;6494:65;6523:12;:10;:12::i;:::-;6545:4;6552:6;6494:11;;;;;;;;;;;:28;;;;:65;;;;;;:::i;:::-;6569:30;6602:23;:21;:23::i;:::-;6569:56;;6635:26;6697:11;;;;;;;;;;;6664:45;;6672:12;;;;;;;;;;;6664:45;;;:80;;6738:6;6664:80;;;6721:14;;6712:6;:23;;;;:::i;:::-;6664:80;6635:109;;6754:19;6783:18:::0;6817:1:::1;6804:10;;;;;;;;;;;:14;;;;:::i;:::-;6783:35;;6833:7;6828:724;6850:16;6846:1;:20;;;6828:724;;;6915:1;6896:16;:20;;;;:::i;:::-;6891:1;:25;;;6887:297;;;6936:17;6977:11;6956:18;:32;;;;:::i;:::-;6936:52;;7043:103;;;;;;;;7071:9;7043:103;;;;7102:12;:26;7115:9;7125:1;7115:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7102:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7043:103;;::::0;7006:7:::1;:21;7014:9;7024:1;7014:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7006:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;7028:11;7006:34;;;;;;;;;;;;;;;:140;;;;;;;;;;;;;;;;;;;7164:5;;;6887:297;7197:14;7214:34;7235:9;7245:1;7235:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7214:20;:34::i;:::-;7197:51;;7262:18;7350:9;;7325:22;7304:18;7292:9;;7283:6;:18;;;;:::i;:::-;:39;;;;:::i;:::-;:64;;;;:::i;:::-;:76;;;;:::i;:::-;7262:97;;7410:92;;;;;;;;7434:10;7410:92;;;;7462:12;:26;7475:9;7485:1;7475:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7462:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7410:92;;::::0;7373:7:::1;:21;7381:9;7391:1;7381:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7373:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;7395:11;7373:34;;;;;;;;;;;;;;;:129;;;;;;;;;;;;;;;;;;;7531:10;7516:25;;;;;:::i;:::-;;;6828:724;;6868:3;;;;;:::i;:::-;;;;6828:724;;;;7574:11;7561:10;;:24;;;;;;;;;;;;;;;;;;7600:33;7610:6;7618:14;;7600:33;;;;;;;:::i;:::-;;;;;;;;7660:1;7643:14;:18;;;;1542:1:4;;;;6256:1412:3::0;:::o;1833:87::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1908:5:3::1;1896:9;;:17;;;;;;;;;;;;;;;;;;1833:87:::0;:::o;9718:165::-;9789:7;9874:2;9841:5;:16;9847:9;9841:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;9815:56;;:12;:23;9828:9;9815:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;:::i;:::-;:61;;;;:::i;:::-;9808:68;;9718:165;;;:::o;1067:24::-;;;;;;;;;;;;;:::o;9205:256::-;9259:7;9278:16;9309:7;9304:126;9326:16;9322:1;:20;;;9304:126;;;9385:34;9406:9;9416:1;9406:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9385:20;:34::i;:::-;9374:8;:45;;;;:::i;:::-;9363:56;;9344:3;;;;;:::i;:::-;;;;9304:126;;;;9446:8;9439:15;;;9205:256;:::o;800:36::-;;;;:::o;386:42:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1380:48:3:-;;;;;;;;;;;;;;;;;;;;;;:::o;1023:38::-;;;;:::o;1254:91:4:-;1299:7;1325:13;;;;;;;;;;;1318:20;;1254:91;:::o;1270:46:3:-;;;;;;;;;;;;;;;;;:::o;2217:182::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2335:11:3::1;2314:18;:32;;;;2379:13;2356:20;:36;;;;2217:182:::0;;:::o;1556:271::-;1483:12:4;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1653:11:3::1;;;;;;;;;;;1652:12;1644:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1712:13;1690:12;;:36;;;;;;;;;;;;;;;;;;1757:12;1736:11;;:34;;;;;;;;;;;;;;;;;;1780:12;:10;:12::i;:::-;1816:4;1802:11;;:18;;;;;;;;;;;;;;;;;;1556:271:::0;;:::o;1789:105:4:-;1483:12;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1879:8:::1;1863:13;;:24;;;;;;;;;;;;;;;;;;1789:105:::0;:::o;7674:467:3:-;7745:13;7719:39;;;;;;;;;;;;;;;;:8;:22;7728:12;:10;:12::i;:::-;7719:22;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7711:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;7843:11;;;;;;;;;;;7810:45;;7818:12;;;;;;;;;;;7810:45;;;7802:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;7930:10;;;;;;;;;;;7898:42;;:14;:28;7913:12;:10;:12::i;:::-;7898:28;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;7890:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7986:20;8008:22;8034:26;8044:12;:10;:12::i;:::-;8058:1;8034:9;:26::i;:::-;7985:75;;;;8070:64;8080:8;:22;8089:12;:10;:12::i;:::-;8080:22;;;;;;;;;;;;;;;;;;;;;;;;;8104:12;8118:15;8070:9;:64::i;:::-;7674:467;;:::o;765:29::-;;;;:::o;586:96:8:-;639:7;665:10;658:17;;586:96;:::o;817:203:9:-;917:96;937:5;967:27;;;996:4;1002:2;1006:5;944:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;917:19;:96::i;:::-;817:203;;;;:::o;8530:378:3:-;8691:13;8663:11;:25;8675:12;:10;:12::i;:::-;8663:25;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;8635:11;:25;8647:12;:10;:12::i;:::-;8635:25;;;;;;;;;;;;;;;:69;;;;8766:13;8740:12;:23;8753:9;8740:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;8714:12;:23;8727:9;8714:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;8820:15;8789:14;:28;8804:12;:10;:12::i;:::-;8789:28;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;8850:51;8859:9;8870:13;8885:15;8850:51;;;;;;;;:::i;:::-;;;;;;;;8530:378;;;:::o;8914:285::-;9049:15;9018:14;:28;9033:12;:10;:12::i;:::-;9018:28;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;9074:53;9099:12;:10;:12::i;:::-;9113:13;9074:11;;;;;;;;;;;:24;;;;:53;;;;;:::i;:::-;9142:50;9150:9;9161:13;9176:15;9142:50;;;;;;;;:::i;:::-;;;;;;;;8914:285;;;:::o;636:175:9:-;718:86;738:5;768:23;;;793:2;797:5;745:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:19;:86::i;:::-;636:175;;;:::o;452:324:0:-;518:21;;;;;;;;527:7;518:21;;;;;;536:2;518:21;;;;;493:5;:22;499:15;493:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;574:21;;;;;;;;583:7;574:21;;;;;;592:2;574:21;;;;;549:5;:22;555:15;549:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;631:22;;;;;;;;640:8;631:22;;;;;;650:2;631:22;;;;;605:5;:23;611:16;605:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:22;;;;;;;;698:8;689:22;;;;;;708:2;689:22;;;;;663:5;:23;669:16;663:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;747:22;;;;;;;;756:8;747:22;;;;;;766:2;747:22;;;;;721:5;:23;727:16;721:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;452:324::o;2972:674:9:-;3359:23;3385:69;3413:4;3385:69;;;;;;;;;;;;;;;;;3393:5;3385:27;;;;:69;;;;;:::i;:::-;3359:95;;3480:1;3460:10;:17;:21;3456:188;;;3575:10;3564:30;;;;;;;;;;;;:::i;:::-;3556:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3456:188;2972:674;;;:::o;3575:193:7:-;3678:12;3709:52;3731:6;3739:4;3745:1;3748:12;3709:21;:52::i;:::-;3702:59;;3575:193;;;;;:::o;4602:523::-;4729:12;4786:5;4761:21;:30;;4753:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;4852:18;4863:6;4852:10;:18::i;:::-;4844:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4975:12;4989:23;5016:6;:11;;5036:5;5044:4;5016:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4974:75;;;;5066:52;5084:7;5093:10;5105:12;5066:17;:52::i;:::-;5059:59;;;;4602:523;;;;;;:::o;718:413::-;778:4;981:12;1090:7;1078:20;1070:28;;1123:1;1116:4;:8;1109:15;;;718:413;;;:::o;7085:725::-;7200:12;7228:7;7224:580;;;7258:10;7251:17;;;;7224:580;7389:1;7369:10;:17;:21;7365:429;;;7627:10;7621:17;7687:15;7674:10;7670:2;7666:19;7659:44;7576:145;7766:12;7759:20;;;;;;;;;;;:::i;:::-;;;;;;;;7085:725;;;;;;:::o;7:139:10:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;351:77;;;;:::o;434:159::-;;528:6;515:20;506:29;;544:43;581:5;544:43;:::i;:::-;496:97;;;;:::o;599:139::-;;683:6;670:20;661:29;;699:33;726:5;699:33;:::i;:::-;651:87;;;;:::o;744:143::-;;832:6;826:13;817:22;;848:33;875:5;848:33;:::i;:::-;807:80;;;;:::o;893:137::-;;976:6;963:20;954:29;;992:32;1018:5;992:32;:::i;:::-;944:86;;;;:::o;1036:262::-;;1144:2;1132:9;1123:7;1119:23;1115:32;1112:2;;;1160:1;1157;1150:12;1112:2;1203:1;1228:53;1273:7;1264:6;1253:9;1249:22;1228:53;:::i;:::-;1218:63;;1174:117;1102:196;;;;:::o;1304:407::-;;;1429:2;1417:9;1408:7;1404:23;1400:32;1397:2;;;1445:1;1442;1435:12;1397:2;1488:1;1513:53;1558:7;1549:6;1538:9;1534:22;1513:53;:::i;:::-;1503:63;;1459:117;1615:2;1641:53;1686:7;1677:6;1666:9;1662:22;1641:53;:::i;:::-;1631:63;;1586:118;1387:324;;;;;:::o;1717:405::-;;;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1857:1;1854;1847:12;1809:2;1900:1;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1871:117;2027:2;2053:52;2097:7;2088:6;2077:9;2073:22;2053:52;:::i;:::-;2043:62;;1998:117;1799:323;;;;;:::o;2128:256::-;;2233:2;2221:9;2212:7;2208:23;2204:32;2201:2;;;2249:1;2246;2239:12;2201:2;2292:1;2317:50;2359:7;2350:6;2339:9;2335:22;2317:50;:::i;:::-;2307:60;;2263:114;2191:193;;;;:::o;2390:278::-;;2506:2;2494:9;2485:7;2481:23;2477:32;2474:2;;;2522:1;2519;2512:12;2474:2;2565:1;2590:61;2643:7;2634:6;2623:9;2619:22;2590:61;:::i;:::-;2580:71;;2536:125;2464:204;;;;:::o;2674:282::-;;2792:2;2780:9;2771:7;2767:23;2763:32;2760:2;;;2808:1;2805;2798:12;2760:2;2851:1;2876:63;2931:7;2922:6;2911:9;2907:22;2876:63;:::i;:::-;2866:73;;2822:127;2750:206;;;;:::o;2962:566::-;;;;3111:2;3099:9;3090:7;3086:23;3082:32;3079:2;;;3127:1;3124;3117:12;3079:2;3170:1;3195:63;3250:7;3241:6;3230:9;3226:22;3195:63;:::i;:::-;3185:73;;3141:127;3307:2;3333:53;3378:7;3369:6;3358:9;3354:22;3333:53;:::i;:::-;3323:63;;3278:118;3435:2;3461:50;3503:7;3494:6;3483:9;3479:22;3461:50;:::i;:::-;3451:60;;3406:115;3069:459;;;;;:::o;3534:425::-;;;3668:2;3656:9;3647:7;3643:23;3639:32;3636:2;;;3684:1;3681;3674:12;3636:2;3727:1;3752:63;3807:7;3798:6;3787:9;3783:22;3752:63;:::i;:::-;3742:73;;3698:127;3864:2;3890:52;3934:7;3925:6;3914:9;3910:22;3890:52;:::i;:::-;3880:62;;3835:117;3626:333;;;;;:::o;3965:262::-;;4073:2;4061:9;4052:7;4048:23;4044:32;4041:2;;;4089:1;4086;4079:12;4041:2;4132:1;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4103:117;4031:196;;;;:::o;4233:284::-;;4352:2;4340:9;4331:7;4327:23;4323:32;4320:2;;;4368:1;4365;4358:12;4320:2;4411:1;4436:64;4492:7;4483:6;4472:9;4468:22;4436:64;:::i;:::-;4426:74;;4382:128;4310:207;;;;:::o;4523:407::-;;;4648:2;4636:9;4627:7;4623:23;4619:32;4616:2;;;4664:1;4661;4654:12;4616:2;4707:1;4732:53;4777:7;4768:6;4757:9;4753:22;4732:53;:::i;:::-;4722:63;;4678:117;4834:2;4860:53;4905:7;4896:6;4885:9;4881:22;4860:53;:::i;:::-;4850:63;;4805:118;4606:324;;;;;:::o;4936:118::-;5023:24;5041:5;5023:24;:::i;:::-;5018:3;5011:37;5001:53;;:::o;5060:373::-;;5192:38;5224:5;5192:38;:::i;:::-;5246:88;5327:6;5322:3;5246:88;:::i;:::-;5239:95;;5343:52;5388:6;5383:3;5376:4;5369:5;5365:16;5343:52;:::i;:::-;5420:6;5415:3;5411:16;5404:23;;5168:265;;;;;:::o;5439:161::-;5541:52;5587:5;5541:52;:::i;:::-;5536:3;5529:65;5519:81;;:::o;5606:147::-;5701:45;5740:5;5701:45;:::i;:::-;5696:3;5689:58;5679:74;;:::o;5759:364::-;;5875:39;5908:5;5875:39;:::i;:::-;5930:71;5994:6;5989:3;5930:71;:::i;:::-;5923:78;;6010:52;6055:6;6050:3;6043:4;6036:5;6032:16;6010:52;:::i;:::-;6087:29;6109:6;6087:29;:::i;:::-;6082:3;6078:39;6071:46;;5851:272;;;;;:::o;6129:371::-;;6292:67;6356:2;6351:3;6292:67;:::i;:::-;6285:74;;6389:34;6385:1;6380:3;6376:11;6369:55;6455:9;6450:2;6445:3;6441:12;6434:31;6491:2;6486:3;6482:12;6475:19;;6275:225;;;:::o;6506:318::-;;6669:67;6733:2;6728:3;6669:67;:::i;:::-;6662:74;;6766:22;6762:1;6757:3;6753:11;6746:43;6815:2;6810:3;6806:12;6799:19;;6652:172;;;:::o;6830:370::-;;6993:67;7057:2;7052:3;6993:67;:::i;:::-;6986:74;;7090:34;7086:1;7081:3;7077:11;7070:55;7156:8;7151:2;7146:3;7142:12;7135:30;7191:2;7186:3;7182:12;7175:19;;6976:224;;;:::o;7206:374::-;;7369:67;7433:2;7428:3;7369:67;:::i;:::-;7362:74;;7466:34;7462:1;7457:3;7453:11;7446:55;7532:12;7527:2;7522:3;7518:12;7511:34;7571:2;7566:3;7562:12;7555:19;;7352:228;;;:::o;7586:371::-;;7749:67;7813:2;7808:3;7749:67;:::i;:::-;7742:74;;7846:34;7842:1;7837:3;7833:11;7826:55;7912:9;7907:2;7902:3;7898:12;7891:31;7948:2;7943:3;7939:12;7932:19;;7732:225;;;:::o;7963:373::-;;8126:67;8190:2;8185:3;8126:67;:::i;:::-;8119:74;;8223:34;8219:1;8214:3;8210:11;8203:55;8289:11;8284:2;8279:3;8275:12;8268:33;8327:2;8322:3;8318:12;8311:19;;8109:227;;;:::o;8342:330::-;;8505:67;8569:2;8564:3;8505:67;:::i;:::-;8498:74;;8602:34;8598:1;8593:3;8589:11;8582:55;8663:2;8658:3;8654:12;8647:19;;8488:184;;;:::o;8678:327::-;;8841:67;8905:2;8900:3;8841:67;:::i;:::-;8834:74;;8938:31;8934:1;8929:3;8925:11;8918:52;8996:2;8991:3;8987:12;8980:19;;8824:181;;;:::o;9011:318::-;;9174:67;9238:2;9233:3;9174:67;:::i;:::-;9167:74;;9271:22;9267:1;9262:3;9258:11;9251:43;9320:2;9315:3;9311:12;9304:19;;9157:172;;;:::o;9335:327::-;;9498:67;9562:2;9557:3;9498:67;:::i;:::-;9491:74;;9595:31;9591:1;9586:3;9582:11;9575:52;9653:2;9648:3;9644:12;9637:19;;9481:181;;;:::o;9668:309::-;;9831:67;9895:2;9890:3;9831:67;:::i;:::-;9824:74;;9928:13;9924:1;9919:3;9915:11;9908:34;9968:2;9963:3;9959:12;9952:19;;9814:163;;;:::o;9983:328::-;;10146:67;10210:2;10205:3;10146:67;:::i;:::-;10139:74;;10243:32;10239:1;10234:3;10230:11;10223:53;10302:2;10297:3;10293:12;10286:19;;10129:182;;;:::o;10317:372::-;;10480:67;10544:2;10539:3;10480:67;:::i;:::-;10473:74;;10577:34;10573:1;10568:3;10564:11;10557:55;10643:10;10638:2;10633:3;10629:12;10622:32;10680:2;10675:3;10671:12;10664:19;;10463:226;;;:::o;10695:374::-;;10858:67;10922:2;10917:3;10858:67;:::i;:::-;10851:74;;10955:34;10951:1;10946:3;10942:11;10935:55;11021:12;11016:2;11011:3;11007:12;11000:34;11060:2;11055:3;11051:12;11044:19;;10841:228;;;:::o;11075:370::-;;11238:67;11302:2;11297:3;11238:67;:::i;:::-;11231:74;;11335:34;11331:1;11326:3;11322:11;11315:55;11401:8;11396:2;11391:3;11387:12;11380:30;11436:2;11431:3;11427:12;11420:19;;11221:224;;;:::o;11451:374::-;;11614:67;11678:2;11673:3;11614:67;:::i;:::-;11607:74;;11711:34;11707:1;11702:3;11698:11;11691:55;11777:12;11772:2;11767:3;11763:12;11756:34;11816:2;11811:3;11807:12;11800:19;;11597:228;;;:::o;11831:118::-;11918:24;11936:5;11918:24;:::i;:::-;11913:3;11906:37;11896:53;;:::o;11955:115::-;12040:23;12057:5;12040:23;:::i;:::-;12035:3;12028:36;12018:52;;:::o;12076:112::-;12159:22;12175:5;12159:22;:::i;:::-;12154:3;12147:35;12137:51;;:::o;12194:271::-;;12346:93;12435:3;12426:6;12346:93;:::i;:::-;12339:100;;12456:3;12449:10;;12328:137;;;;:::o;12471:222::-;;12602:2;12591:9;12587:18;12579:26;;12615:71;12683:1;12672:9;12668:17;12659:6;12615:71;:::i;:::-;12569:124;;;;:::o;12699:332::-;;12858:2;12847:9;12843:18;12835:26;;12871:71;12939:1;12928:9;12924:17;12915:6;12871:71;:::i;:::-;12952:72;13020:2;13009:9;13005:18;12996:6;12952:72;:::i;:::-;12825:206;;;;;:::o;13037:442::-;;13224:2;13213:9;13209:18;13201:26;;13237:71;13305:1;13294:9;13290:17;13281:6;13237:71;:::i;:::-;13318:72;13386:2;13375:9;13371:18;13362:6;13318:72;:::i;:::-;13400;13468:2;13457:9;13453:18;13444:6;13400:72;:::i;:::-;13191:288;;;;;;:::o;13485:332::-;;13644:2;13633:9;13629:18;13621:26;;13657:71;13725:1;13714:9;13710:17;13701:6;13657:71;:::i;:::-;13738:72;13806:2;13795:9;13791:18;13782:6;13738:72;:::i;:::-;13611:206;;;;;:::o;13823:252::-;;13969:2;13958:9;13954:18;13946:26;;13982:86;14065:1;14054:9;14050:17;14041:6;13982:86;:::i;:::-;13936:139;;;;:::o;14081:238::-;;14220:2;14209:9;14205:18;14197:26;;14233:79;14309:1;14298:9;14294:17;14285:6;14233:79;:::i;:::-;14187:132;;;;:::o;14325:458::-;;14520:2;14509:9;14505:18;14497:26;;14533:79;14609:1;14598:9;14594:17;14585:6;14533:79;:::i;:::-;14622:72;14690:2;14679:9;14675:18;14666:6;14622:72;:::i;:::-;14704;14772:2;14761:9;14757:18;14748:6;14704:72;:::i;:::-;14487:296;;;;;;:::o;14789:454::-;;14982:2;14971:9;14967:18;14959:26;;14995:79;15071:1;15060:9;15056:17;15047:6;14995:79;:::i;:::-;15084:72;15152:2;15141:9;15137:18;15128:6;15084:72;:::i;:::-;15166:70;15232:2;15221:9;15217:18;15208:6;15166:70;:::i;:::-;14949:294;;;;;;:::o;15249:313::-;;15400:2;15389:9;15385:18;15377:26;;15449:9;15443:4;15439:20;15435:1;15424:9;15420:17;15413:47;15477:78;15550:4;15541:6;15477:78;:::i;:::-;15469:86;;15367:195;;;;:::o;15568:419::-;;15772:2;15761:9;15757:18;15749:26;;15821:9;15815:4;15811:20;15807:1;15796:9;15792:17;15785:47;15849:131;15975:4;15849:131;:::i;:::-;15841:139;;15739:248;;;:::o;15993:419::-;;16197:2;16186:9;16182:18;16174:26;;16246:9;16240:4;16236:20;16232:1;16221:9;16217:17;16210:47;16274:131;16400:4;16274:131;:::i;:::-;16266:139;;16164:248;;;:::o;16418:419::-;;16622:2;16611:9;16607:18;16599:26;;16671:9;16665:4;16661:20;16657:1;16646:9;16642:17;16635:47;16699:131;16825:4;16699:131;:::i;:::-;16691:139;;16589:248;;;:::o;16843:419::-;;17047:2;17036:9;17032:18;17024:26;;17096:9;17090:4;17086:20;17082:1;17071:9;17067:17;17060:47;17124:131;17250:4;17124:131;:::i;:::-;17116:139;;17014:248;;;:::o;17268:419::-;;17472:2;17461:9;17457:18;17449:26;;17521:9;17515:4;17511:20;17507:1;17496:9;17492:17;17485:47;17549:131;17675:4;17549:131;:::i;:::-;17541:139;;17439:248;;;:::o;17693:419::-;;17897:2;17886:9;17882:18;17874:26;;17946:9;17940:4;17936:20;17932:1;17921:9;17917:17;17910:47;17974:131;18100:4;17974:131;:::i;:::-;17966:139;;17864:248;;;:::o;18118:419::-;;18322:2;18311:9;18307:18;18299:26;;18371:9;18365:4;18361:20;18357:1;18346:9;18342:17;18335:47;18399:131;18525:4;18399:131;:::i;:::-;18391:139;;18289:248;;;:::o;18543:419::-;;18747:2;18736:9;18732:18;18724:26;;18796:9;18790:4;18786:20;18782:1;18771:9;18767:17;18760:47;18824:131;18950:4;18824:131;:::i;:::-;18816:139;;18714:248;;;:::o;18968:419::-;;19172:2;19161:9;19157:18;19149:26;;19221:9;19215:4;19211:20;19207:1;19196:9;19192:17;19185:47;19249:131;19375:4;19249:131;:::i;:::-;19241:139;;19139:248;;;:::o;19393:419::-;;19597:2;19586:9;19582:18;19574:26;;19646:9;19640:4;19636:20;19632:1;19621:9;19617:17;19610:47;19674:131;19800:4;19674:131;:::i;:::-;19666:139;;19564:248;;;:::o;19818:419::-;;20022:2;20011:9;20007:18;19999:26;;20071:9;20065:4;20061:20;20057:1;20046:9;20042:17;20035:47;20099:131;20225:4;20099:131;:::i;:::-;20091:139;;19989:248;;;:::o;20243:419::-;;20447:2;20436:9;20432:18;20424:26;;20496:9;20490:4;20486:20;20482:1;20471:9;20467:17;20460:47;20524:131;20650:4;20524:131;:::i;:::-;20516:139;;20414:248;;;:::o;20668:419::-;;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20839:248;;;:::o;21093:419::-;;21297:2;21286:9;21282:18;21274:26;;21346:9;21340:4;21336:20;21332:1;21321:9;21317:17;21310:47;21374:131;21500:4;21374:131;:::i;:::-;21366:139;;21264:248;;;:::o;21518:419::-;;21722:2;21711:9;21707:18;21699:26;;21771:9;21765:4;21761:20;21757:1;21746:9;21742:17;21735:47;21799:131;21925:4;21799:131;:::i;:::-;21791:139;;21689:248;;;:::o;21943:419::-;;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;22114:248;;;:::o;22368:222::-;;22499:2;22488:9;22484:18;22476:26;;22512:71;22580:1;22569:9;22565:17;22556:6;22512:71;:::i;:::-;22466:124;;;;:::o;22596:332::-;;22755:2;22744:9;22740:18;22732:26;;22768:71;22836:1;22825:9;22821:17;22812:6;22768:71;:::i;:::-;22849:72;22917:2;22906:9;22902:18;22893:6;22849:72;:::i;:::-;22722:206;;;;;:::o;22934:328::-;;23091:2;23080:9;23076:18;23068:26;;23104:71;23172:1;23161:9;23157:17;23148:6;23104:71;:::i;:::-;23185:70;23251:2;23240:9;23236:18;23227:6;23185:70;:::i;:::-;23058:204;;;;;:::o;23268:218::-;;23397:2;23386:9;23382:18;23374:26;;23410:69;23476:1;23465:9;23461:17;23452:6;23410:69;:::i;:::-;23364:122;;;;:::o;23492:320::-;;23645:2;23634:9;23630:18;23622:26;;23658:69;23724:1;23713:9;23709:17;23700:6;23658:69;:::i;:::-;23737:68;23801:2;23790:9;23786:18;23777:6;23737:68;:::i;:::-;23612:200;;;;;:::o;23818:214::-;;23945:2;23934:9;23930:18;23922:26;;23958:67;24022:1;24011:9;24007:17;23998:6;23958:67;:::i;:::-;23912:120;;;;:::o;24038:98::-;;24123:5;24117:12;24107:22;;24096:40;;;:::o;24142:99::-;;24228:5;24222:12;24212:22;;24201:40;;;:::o;24247:147::-;;24385:3;24370:18;;24360:34;;;;:::o;24400:169::-;;24518:6;24513:3;24506:19;24558:4;24553:3;24549:14;24534:29;;24496:73;;;;:::o;24575:305::-;;24634:20;24652:1;24634:20;:::i;:::-;24629:25;;24668:20;24686:1;24668:20;:::i;:::-;24663:25;;24822:1;24754:66;24750:74;24747:1;24744:81;24741:2;;;24828:18;;:::i;:::-;24741:2;24872:1;24869;24865:9;24858:16;;24619:261;;;;:::o;24886:246::-;;24944:19;24961:1;24944:19;:::i;:::-;24939:24;;24977:19;24994:1;24977:19;:::i;:::-;24972:24;;25074:1;25062:10;25058:18;25055:1;25052:25;25049:2;;;25080:18;;:::i;:::-;25049:2;25124:1;25121;25117:9;25110:16;;24929:203;;;;:::o;25138:185::-;;25195:20;25213:1;25195:20;:::i;:::-;25190:25;;25229:20;25247:1;25229:20;:::i;:::-;25224:25;;25268:1;25258:2;;25273:18;;:::i;:::-;25258:2;25315:1;25312;25308:9;25303:14;;25180:143;;;;:::o;25329:348::-;;25392:20;25410:1;25392:20;:::i;:::-;25387:25;;25426:20;25444:1;25426:20;:::i;:::-;25421:25;;25614:1;25546:66;25542:74;25539:1;25536:81;25531:1;25524:9;25517:17;25513:105;25510:2;;;25621:18;;:::i;:::-;25510:2;25669:1;25666;25662:9;25651:20;;25377:300;;;;:::o;25683:191::-;;25743:20;25761:1;25743:20;:::i;:::-;25738:25;;25777:20;25795:1;25777:20;:::i;:::-;25772:25;;25816:1;25813;25810:8;25807:2;;;25821:18;;:::i;:::-;25807:2;25866:1;25863;25859:9;25851:17;;25728:146;;;;:::o;25880:188::-;;25939:19;25956:1;25939:19;:::i;:::-;25934:24;;25972:19;25989:1;25972:19;:::i;:::-;25967:24;;26010:1;26007;26004:8;26001:2;;;26015:18;;:::i;:::-;26001:2;26060:1;26057;26053:9;26045:17;;25924:144;;;;:::o;26074:96::-;;26140:24;26158:5;26140:24;:::i;:::-;26129:35;;26119:51;;;:::o;26176:90::-;;26253:5;26246:13;26239:21;26228:32;;26218:48;;;:::o;26272:131::-;;26348:5;26337:16;;26354:43;26391:5;26354:43;:::i;:::-;26327:76;;;:::o;26409:126::-;;26486:42;26479:5;26475:54;26464:65;;26454:81;;;:::o;26541:77::-;;26607:5;26596:16;;26586:32;;;:::o;26624:93::-;;26700:10;26693:5;26689:22;26678:33;;26668:49;;;:::o;26723:86::-;;26798:4;26791:5;26787:16;26776:27;;26766:43;;;:::o;26815:156::-;;26913:52;26959:5;26913:52;:::i;:::-;26900:65;;26890:81;;;:::o;26977:128::-;;27075:24;27093:5;27075:24;:::i;:::-;27062:37;;27052:53;;;:::o;27111:131::-;;27202:34;27230:5;27202:34;:::i;:::-;27189:47;;27179:63;;;:::o;27248:307::-;27316:1;27326:113;27340:6;27337:1;27334:13;27326:113;;;27425:1;27420:3;27416:11;27410:18;27406:1;27401:3;27397:11;27390:39;27362:2;27359:1;27355:10;27350:15;;27326:113;;;27457:6;27454:1;27451:13;27448:2;;;27537:1;27528:6;27523:3;27519:16;27512:27;27448:2;27297:258;;;;:::o;27561:175::-;;27622:23;27639:5;27622:23;:::i;:::-;27613:32;;27667:10;27660:5;27657:21;27654:2;;;27681:18;;:::i;:::-;27654:2;27728:1;27721:5;27717:13;27710:20;;27603:133;;;:::o;27742:167::-;;27802:22;27818:5;27802:22;:::i;:::-;27793:31;;27846:4;27839:5;27836:15;27833:2;;;27854:18;;:::i;:::-;27833:2;27901:1;27894:5;27890:13;27883:20;;27783:126;;;:::o;27915:180::-;27963:77;27960:1;27953:88;28060:4;28057:1;28050:15;28084:4;28081:1;28074:15;28101:180;28149:77;28146:1;28139:88;28246:4;28243:1;28236:15;28270:4;28267:1;28260:15;28287:180;28335:77;28332:1;28325:88;28432:4;28429:1;28422:15;28456:4;28453:1;28446:15;28473:102;;28565:2;28561:7;28556:2;28549:5;28545:14;28541:28;28531:38;;28521:54;;;:::o;28581:115::-;28664:1;28657:5;28654:12;28644:2;;28670:18;;:::i;:::-;28644:2;28634:62;:::o;28702:122::-;28775:24;28793:5;28775:24;:::i;:::-;28768:5;28765:35;28755:2;;28814:1;28811;28804:12;28755:2;28745:79;:::o;28830:116::-;28900:21;28915:5;28900:21;:::i;:::-;28893:5;28890:32;28880:2;;28936:1;28933;28926:12;28880:2;28870:76;:::o;28952:109::-;29035:1;29028:5;29025:12;29015:2;;29051:1;29048;29041:12;29015:2;29005:56;:::o;29067:122::-;29140:24;29158:5;29140:24;:::i;:::-;29133:5;29130:35;29120:2;;29179:1;29176;29169:12;29120:2;29110:79;:::o;29195:120::-;29267:23;29284:5;29267:23;:::i;:::-;29260:5;29257:34;29247:2;;29305:1;29302;29295:12;29247:2;29237:78;:::o
Swarm Source
ipfs://b19cd5ea553df43440dfaad5dfebd46d342fdb98dc9d20770827d8ada5f146f0
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.