Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 24 from a total of 24 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 10312900 | 4 hrs ago | IN | 0 S | 0.02568805 | ||||
Set Early Withdr... | 10311802 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311784 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311765 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311742 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311723 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311705 | 4 hrs ago | IN | 0 S | 0.00144221 | ||||
Set Early Withdr... | 10311687 | 4 hrs ago | IN | 0 S | 0.00144155 | ||||
Set Early Withdr... | 10311664 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311647 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311629 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311596 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311575 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311561 | 4 hrs ago | IN | 0 S | 0.00143858 | ||||
Set Early Withdr... | 10311543 | 4 hrs ago | IN | 0 S | 0.00143792 | ||||
Deposit | 10309418 | 5 hrs ago | IN | 0 S | 0.01771858 | ||||
Set Unstaking Fr... | 10298694 | 6 hrs ago | IN | 0 S | 0.00171748 | ||||
Add Vault | 10298643 | 6 hrs ago | IN | 0 S | 0.01304435 | ||||
Add Vault | 10298509 | 6 hrs ago | IN | 0 S | 0.01222122 | ||||
Add Vault | 10298337 | 6 hrs ago | IN | 0 S | 0.01139809 | ||||
Add Vault | 10296032 | 6 hrs ago | IN | 0 S | 0.01057864 | ||||
Add Vault | 10295958 | 6 hrs ago | IN | 0 S | 0.0097592 | ||||
Add Vault | 10290856 | 6 hrs ago | IN | 0 S | 0.00893854 | ||||
Add Vault | 10289399 | 6 hrs ago | IN | 0 S | 0.00905839 |
Loading...
Loading
Contract Name:
VaultsBank
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-26 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } /** * @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); } } } } /** * @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 SafeMath for uint256; 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _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"); } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } interface IStrategy { // Total want tokens managed by strategy function wantLockedTotal() external view returns (uint256); // Sum of all shares of users to wantLockedTotal function sharesTotal() external view returns (uint256); function wantAddress() external view returns (address); function token0Address() external view returns (address); function token1Address() external view returns (address); function earnedAddress() external view returns (address); function getPricePerFullShare() external view returns (uint256); // Main want token compounding function function earn() external; // Transfer want tokens autoFarm -> strategy function deposit(address _userAddress, uint256 _wantAmt) external returns (uint256); // Transfer want tokens strategy -> autoFarm function withdraw(address _userAddress, uint256 _wantAmt) external returns (uint256); function inCaseTokensGetStuck(address _token, uint256 _amount) external; function inFarmBalance() external view returns (uint256); function totalBalance() external view returns (uint256); } contract VaultsBank is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // governance address public operator; // should be an at least 6h timelock // Info of each user. struct UserInfo { uint256 shares; // How many LP tokens the user has provided. mapping(uint256 => uint256) rewardDebt; // Reward debt. See explanation below. uint256 lastStakeTime; uint256 totalDeposit; uint256 totalWithdraw; } struct PoolInfo { IERC20 want; // Address of the want token. uint256 allocPoint; // How many allocation points assigned to this pool. uint256 lastRewardTime; // Last block number that reward distribution occurs. mapping(uint256 => uint256) accRewardPerShare; // Accumulated rewardPool per share, times 1e18. address strategy; // Strategy address that will auto compound want tokens uint256 earlyWithdrawFee; // 10000 uint256 earlyWithdrawTime; // 10000 } // Info of each rewardPool funding. struct RewardPoolInfo { address rewardToken; // Address of rewardPool token contract. uint256 rewardPerSecond; // Reward token amount to distribute per block. uint256 totalPaidRewards; } uint256 public startTime; PoolInfo[] public poolInfo; // Info of each pool. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Info of each user that stakes LP tokens. RewardPoolInfo[] public rewardPoolInfo; uint256 public totalAllocPoint = 0; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public unstakingFrozenTime = 1 hours; address public timelock = address(0x0000000000000000000000000000000000000000); // 6h timelock /* =================== Added variables (need to keep orders for proxy to work) =================== */ mapping(address => bool) public whitelistedContract; mapping(address => bool) public whitelisted; mapping(uint256 => bool) public stopRewardPool; mapping(uint256 => bool) public pausePool; /* ========== EVENTS ========== */ event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); event RewardPaid(uint256 indexed rewardPid, address indexed token, address indexed user, uint256 amount); constructor(address _operator) public { operator = _operator; startTime = block.timestamp; } modifier onlyOperator() { require(operator == msg.sender, "VaultsBank: caller is not the operator"); _; } modifier onlyTimelock() { require(timelock == msg.sender, "VaultsBank: caller is not timelock"); _; } modifier notContract() { if (!whitelistedContract[msg.sender]) { require(!Address.isContract(msg.sender), "contract not allowed"); } _; } function poolLength() external view returns (uint256) { return poolInfo.length; } function addVault(uint256 _allocPoint, IERC20 _want, bool _withUpdate, address _strategy, uint256 _earlyWithdrawFee, uint256 _earlyWithdrawTime) public onlyOperator { if (_withUpdate) { massUpdatePools(); } uint256 _lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push( PoolInfo({ want: _want, allocPoint: _allocPoint, lastRewardTime: _lastRewardTime, strategy : _strategy, earlyWithdrawFee: _earlyWithdrawFee, earlyWithdrawTime: _earlyWithdrawTime })); } // Update the given pool's reward allocation point. Can only be called by the owner. function setAllocPoint(uint256 _pid, uint256 _allocPoint) public onlyOperator { massUpdatePools(); totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } function setEarlyWithdrawFee(uint256 _pid, uint256 _earlyWithdrawFee) public onlyOperator { poolInfo[_pid].earlyWithdrawFee = _earlyWithdrawFee; } function setEarlyWithdrawTime(uint256 _pid, uint256 _earlyWithdrawTime) public onlyOperator { poolInfo[_pid].earlyWithdrawTime = _earlyWithdrawTime; } function rewardPoolLength() external view returns (uint256) { return rewardPoolInfo.length; } function addRewardPool(address _rewardToken, uint256 _rewardPerSecond) public nonReentrant onlyOperator { require(rewardPoolInfo.length <= 16, "VaultsBank: Reward pool length > 16"); massUpdatePools(); rewardPoolInfo.push(RewardPoolInfo({ rewardToken : _rewardToken, rewardPerSecond : _rewardPerSecond, totalPaidRewards : 0 })); } function updateRewardToken(uint256 _rewardPid, address _rewardToken, uint256 _rewardPerSecond) external nonReentrant onlyOperator { RewardPoolInfo storage rewardPool = rewardPoolInfo[_rewardPid]; require(_rewardPid >= 2, "core reward pool"); require(rewardPool.rewardPerSecond == 0, "old pool still running"); massUpdatePools(); rewardPool.rewardToken = _rewardToken; rewardPool.rewardPerSecond = _rewardPerSecond; rewardPool.totalPaidRewards = 0; } function updateRewardPerSecond(uint256 _rewardPid, uint256 _rewardPerSecond) external nonReentrant onlyOperator { massUpdatePools(); RewardPoolInfo storage rewardPool = rewardPoolInfo[_rewardPid]; rewardPool.rewardPerSecond = _rewardPerSecond; } function setUnstakingFrozenTime(uint256 _unstakingFrozenTime) external nonReentrant onlyOperator { require(_unstakingFrozenTime <= 7 days, "VaultsBank: !safe - dont lock for too long"); unstakingFrozenTime = _unstakingFrozenTime; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { return _to.sub(_from); } // View function to see pending reward on frontend. function pendingReward(uint256 _pid, uint256 _rewardPid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 _accRewardPerShare = pool.accRewardPerShare[_rewardPid]; uint256 sharesTotal = IStrategy(pool.strategy).sharesTotal(); if (block.timestamp > pool.lastRewardTime && sharesTotal != 0) { uint256 _multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); uint256 _rewardPerSecond = rewardPoolInfo[_rewardPid].rewardPerSecond; uint256 _reward = _multiplier.mul(_rewardPerSecond).mul(pool.allocPoint).div(totalAllocPoint); _accRewardPerShare = _accRewardPerShare.add(_reward.mul(1e18).div(sharesTotal)); } return user.shares.mul(_accRewardPerShare).div(1e18).sub(user.rewardDebt[_rewardPid]); } // View function to see staked Want tokens on frontend. function stakedWantTokens(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 sharesTotal = IStrategy(pool.strategy).sharesTotal(); uint256 wantLockedTotal = IStrategy(poolInfo[_pid].strategy).wantLockedTotal(); if (sharesTotal == 0) { return 0; } return user.shares.mul(wantLockedTotal).div(sharesTotal); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (address(pool.want) == address(0)) { return; } if (block.timestamp <= pool.lastRewardTime) { return; } uint256 sharesTotal = IStrategy(pool.strategy).sharesTotal(); if (sharesTotal == 0) { pool.lastRewardTime = block.timestamp; return; } uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp); if (multiplier <= 0) { return; } uint256 _rewardPoolLength = rewardPoolInfo.length; for (uint256 _rewardPid = 0; _rewardPid < _rewardPoolLength; ++_rewardPid) { uint256 _rewardPerSecond = rewardPoolInfo[_rewardPid].rewardPerSecond; uint256 _reward = multiplier.mul(_rewardPerSecond).mul(pool.allocPoint).div(totalAllocPoint); pool.accRewardPerShare[_rewardPid] = pool.accRewardPerShare[_rewardPid].add(_reward.mul(1e18).div(sharesTotal)); pool.lastRewardTime = block.timestamp; } } function _getReward(uint256 _pid) internal { PoolInfo storage _pool = poolInfo[_pid]; UserInfo storage _user = userInfo[_pid][msg.sender]; uint256 _rewardPoolLength = rewardPoolInfo.length; for (uint256 _rewardPid = 0; _rewardPid < _rewardPoolLength; ++_rewardPid) { if (!stopRewardPool[_rewardPid]) { uint256 _pending = _user.shares.mul(_pool.accRewardPerShare[_rewardPid]).div(1e18).sub(_user.rewardDebt[_rewardPid]); if (_pending > 0) { RewardPoolInfo storage rewardPool = rewardPoolInfo[_rewardPid]; address _rewardToken = rewardPool.rewardToken; safeRewardTransfer(_rewardToken, msg.sender, _pending); rewardPool.totalPaidRewards = rewardPool.totalPaidRewards.add(_pending); emit RewardPaid(_rewardPid, _rewardToken, msg.sender, _pending); } } } } function _checkStrategyBalanceAfterDeposit(address _strategy, uint256 _depositAmount, uint256 _oldInFarmBalance, uint256 _oldTotalBalance) internal view { require(_oldInFarmBalance + _depositAmount <= IStrategy(_strategy).inFarmBalance(), "Short of strategy infarm balance: need audit!"); require(_oldTotalBalance + _depositAmount <= IStrategy(_strategy).totalBalance(), "Short of strategy total balance: need audit!"); } function _checkStrategyBalanceAfterWithdraw(address _strategy, uint256 _withdrawAmount, uint256 _oldInFarmBalance, uint256 _oldTotalBalance) internal view { require(_oldInFarmBalance <= _withdrawAmount + IStrategy(_strategy).inFarmBalance(), "Short of strategy infarm balance: need audit!"); require(_oldTotalBalance <= _withdrawAmount + IStrategy(_strategy).totalBalance(), "Short of strategy total balance: need audit!"); } function deposit(uint256 _pid, uint256 _wantAmt) public nonReentrant notContract { require(!pausePool[_pid], "paused"); updatePool(_pid); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (user.shares > 0) { _getReward(_pid); } if (_wantAmt > 0) { IERC20 _want = pool.want; address _strategy = pool.strategy; uint256 _before = _want.balanceOf(address(this)); _want.safeTransferFrom(address(msg.sender), address(this), _wantAmt); uint256 _after = _want.balanceOf(address(this)); _wantAmt = _after - _before; // fix issue of deflation token _want.safeIncreaseAllowance(_strategy, _wantAmt); uint256 sharesAdded; { uint256 _oldInFarmBalance = IStrategy(_strategy).inFarmBalance(); uint256 _oldTotalBalance = IStrategy(_strategy).totalBalance(); sharesAdded = IStrategy(_strategy).deposit(msg.sender, _wantAmt); _checkStrategyBalanceAfterDeposit(_strategy, _wantAmt, _oldInFarmBalance, _oldTotalBalance); } user.shares = user.shares.add(sharesAdded); user.totalDeposit = user.totalDeposit.add(_wantAmt); user.lastStakeTime = block.timestamp; } uint256 _rewardPoolLength = rewardPoolInfo.length; for (uint256 _rewardPid = 0; _rewardPid < _rewardPoolLength; ++_rewardPid) { user.rewardDebt[_rewardPid] = user.shares.mul(pool.accRewardPerShare[_rewardPid]).div(1e18); } emit Deposit(msg.sender, _pid, _wantAmt); } function unfrozenStakeTime(uint256 _pid, address _account) public view returns (uint256) { return (whitelisted[_account]) ? userInfo[_pid][_account].lastStakeTime : userInfo[_pid][_account].lastStakeTime + unstakingFrozenTime; } function earlyWithdrawTimeEnd(uint256 _pid, address _account) public view returns (uint256) { return (whitelisted[_account]) ? userInfo[_pid][_account].lastStakeTime : userInfo[_pid][_account].lastStakeTime + poolInfo[_pid].earlyWithdrawTime; } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _wantAmt) public nonReentrant notContract { require(!pausePool[_pid], "paused"); updatePool(_pid); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 wantLockedTotal = IStrategy(poolInfo[_pid].strategy).wantLockedTotal(); uint256 sharesTotal = IStrategy(poolInfo[_pid].strategy).sharesTotal(); address _strategy = pool.strategy; require(user.shares > 0, "VaultsBank: user.shares is 0"); require(sharesTotal > 0, "VaultsBank: sharesTotal is 0"); _getReward(_pid); // Withdraw want tokens uint256 amount = user.shares.mul(wantLockedTotal).div(sharesTotal); if (_wantAmt > amount) { _wantAmt = amount; } if (_wantAmt > 0) { uint256 sharesRemoved; { uint256 _oldInFarmBalance = IStrategy(_strategy).inFarmBalance(); uint256 _oldTotalBalance = IStrategy(_strategy).totalBalance(); sharesRemoved = IStrategy(_strategy).withdraw(msg.sender, _wantAmt); _checkStrategyBalanceAfterWithdraw(_strategy, _wantAmt, _oldInFarmBalance, _oldTotalBalance); } if (sharesRemoved > user.shares) { user.shares = 0; } else { user.shares = user.shares.sub(sharesRemoved); } uint256 wantBal = IERC20(pool.want).balanceOf(address(this)); if (wantBal < _wantAmt) { _wantAmt = wantBal; } if (_wantAmt > 0) { require(whitelisted[msg.sender] || block.timestamp >= unfrozenStakeTime(_pid, msg.sender), "VaultsBank: frozen"); if (block.timestamp >= earlyWithdrawTimeEnd(_pid, msg.sender)) { pool.want.safeTransfer(address(msg.sender), _wantAmt); } else { uint256 fee = _wantAmt.mul(poolInfo[_pid].earlyWithdrawFee).div(10000); uint256 userReceivedAmount = _wantAmt.sub(fee); pool.want.safeTransfer(operator, fee); pool.want.safeTransfer(address(msg.sender), userReceivedAmount); } user.totalWithdraw = user.totalWithdraw.add(_wantAmt); } } uint256 _rewardPoolLength = rewardPoolInfo.length; for (uint256 _rewardPid = 0; _rewardPid < _rewardPoolLength; ++_rewardPid) { user.rewardDebt[_rewardPid] = user.shares.mul(pool.accRewardPerShare[_rewardPid]).div(1e18); } emit Withdraw(msg.sender, _pid, _wantAmt); } function withdrawAll(uint256 _pid) external notContract { withdraw(_pid, uint256(-1)); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public notContract nonReentrant { require(!pausePool[_pid], "paused"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 wantLockedTotal = IStrategy(poolInfo[_pid].strategy).wantLockedTotal(); uint256 sharesTotal = IStrategy(poolInfo[_pid].strategy).sharesTotal(); uint256 amount = user.shares.mul(wantLockedTotal).div(sharesTotal); IStrategy(poolInfo[_pid].strategy).withdraw(msg.sender, amount); if (amount > 0) { require(whitelisted[msg.sender] || block.timestamp >= unfrozenStakeTime(_pid, msg.sender), "VaultsBank: frozen"); if (block.timestamp >= earlyWithdrawTimeEnd(_pid, msg.sender)) { pool.want.safeTransfer(address(msg.sender), amount); } else if (poolInfo[_pid].earlyWithdrawFee > 0) { uint256 fee = amount.mul(poolInfo[_pid].earlyWithdrawFee).div(10000); uint256 userReceivedAmount = amount.sub(fee); pool.want.safeTransfer(operator, fee); pool.want.safeTransfer(address(msg.sender), userReceivedAmount); } user.totalWithdraw = user.totalWithdraw.add(amount); } emit EmergencyWithdraw(msg.sender, _pid, amount); user.shares = 0; uint256 _rewardPoolLength = rewardPoolInfo.length; for (uint256 _rewardPid = 0; _rewardPid < _rewardPoolLength; ++_rewardPid) { user.rewardDebt[_rewardPid] = 0; } } // Safe reward token transfer function, just in case if rounding error causes pool to not have enough function safeRewardTransfer(address _rewardToken, address _to, uint256 _amount) internal { uint256 _bal = IERC20(_rewardToken).balanceOf(address(this)); if (_amount > _bal) { IERC20(_rewardToken).transfer(_to, _bal); } else { IERC20(_rewardToken).transfer(_to, _amount); } } function setWhitelisted(address _account, bool _whitelisted) external nonReentrant onlyOperator { whitelisted[_account] = _whitelisted; } function setWhitelistedContract(address _contract, bool _whitelisted) external onlyOperator { whitelistedContract[_contract] = _whitelisted; } function setStopRewardPool(uint256 _pid, bool _stopRewardPool) external nonReentrant onlyOperator { stopRewardPool[_pid] = _stopRewardPool; } function setPausePool(uint256 _pid, bool _pausePool) external nonReentrant onlyOperator { pausePool[_pid] = _pausePool; } /* ========== EMERGENCY ========== */ function setTimelock(address _timelock) external { require(msg.sender == timelock || (timelock == address(0) && msg.sender == operator), "VaultsBank: !authorised"); timelock = _timelock; } function inCaseTokensGetStuck(address _token, uint256 _amount, address _to) external onlyTimelock { IERC20(_token).safeTransfer(_to, _amount); } event ExecuteTransaction(address indexed target, uint256 value, string signature, bytes data); /** * @dev This is from Timelock contract. */ function executeTransaction(address target, uint256 value, string memory signature, bytes memory data) external onlyTimelock returns (bytes memory) { bytes memory callData; if (bytes(signature).length == 0) { callData = data; } else { callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); } // solium-disable-next-line security/no-call-value (bool success, bytes memory returnData) = target.call{value : value}(callData); require(success, "VaultsBank::executeTransaction: Transaction execution reverted."); emit ExecuteTransaction(target, value, signature, data); return returnData; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"rewardPid","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerSecond","type":"uint256"}],"name":"addRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_want","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"uint256","name":"_earlyWithdrawFee","type":"uint256"},{"internalType":"uint256","name":"_earlyWithdrawTime","type":"uint256"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"earlyWithdrawTimeEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pausePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_rewardPid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"want","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"uint256","name":"earlyWithdrawFee","type":"uint256"},{"internalType":"uint256","name":"earlyWithdrawTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPoolInfo","outputs":[{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewardPerSecond","type":"uint256"},{"internalType":"uint256","name":"totalPaidRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPoolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"setAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_earlyWithdrawFee","type":"uint256"}],"name":"setEarlyWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_earlyWithdrawTime","type":"uint256"}],"name":"setEarlyWithdrawTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_pausePool","type":"bool"}],"name":"setPausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_stopRewardPool","type":"bool"}],"name":"setStopRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unstakingFrozenTime","type":"uint256"}],"name":"setUnstakingFrozenTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"stakedWantTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stopRewardPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"unfrozenStakeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstakingFrozenTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPid","type":"uint256"},{"internalType":"uint256","name":"_rewardPerSecond","type":"uint256"}],"name":"updateRewardPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPid","type":"uint256"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerSecond","type":"uint256"}],"name":"updateRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastStakeTime","type":"uint256"},{"internalType":"uint256","name":"totalDeposit","type":"uint256"},{"internalType":"uint256","name":"totalWithdraw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600655610e10600755600880546001600160a01b031916905534801561002b57600080fd5b50604051613f08380380613f088339818101604052602081101561004e57600080fd5b50516001600081905580546001600160a01b039092166001600160a01b031990921691909117905542600255613e7f806100896000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806367206d401161013b578063bdacb303116100b8578063d603fc061161007c578063d603fc0614610919578063d936547e14610945578063ddd5c8a21461096b578063e2bbb1581461098e578063e80d9217146109b157610248565b8063bdacb30314610873578063c421449214610899578063ceb2c11c146108c7578063cecd9a6a146108ec578063d33219b41461091157610248565b80639281aa0b116100ff5780639281aa0b1461078d57806393f1a40b146107bb578063958e2d311461080d5780639da953261461082a578063afebb2ad1461084757610248565b806367206d40146106bb57806372aa0a60146106f157806378e97925146107365780637b84daec1461073e5780638dbb1e3a1461076a57610248565b806328836fd7116101c95780635312ea8e1161018d5780635312ea8e1461060d578063570ca7351461062a5780635e8ead771461064e5780635ed51d4c1461066b578063630b5ba1146106b357610248565b806328836fd71461056d5780633f16490514610593578063441a3e70146105c55780635021c6bb146105e857806351eb05a6146105f057610248565b806317caf6f11161021057806317caf6f11461033a5780631a4901c7146103425780631c5ef433146103675780632224fa2514610393578063225db2261461054a57610248565b8063045ff1bb1461024d578063081e3eda1461027e5780630abc92cb146102985780631526fe27146102ca57806317837baa14610332575b600080fd5b61026a6004803603602081101561026357600080fd5b50356109d4565b604080519115158252519081900360200190f35b6102866109e9565b60408051918252519081900360200190f35b610286600480360360608110156102ae57600080fd5b50803590602081013590604001356001600160a01b03166109ef565b6102e7600480360360208110156102e057600080fd5b5035610b94565b60405180876001600160a01b03168152602001868152602001858152602001846001600160a01b03168152602001838152602001828152602001965050505050505060405180910390f35b610286610be3565b610286610be9565b6103656004803603604081101561035857600080fd5b5080359060200135610bef565b005b6103656004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610c5f565b6104d5600480360360808110156103a957600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184600183028401116401000000008311171561040d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e03945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561050f5781810151838201526020016104f7565b50505050905090810190601f16801561053c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103656004803603604081101561056057600080fd5b50803590602001356110e9565b61026a6004803603602081101561058357600080fd5b50356001600160a01b0316611159565b610365600480360360608110156105a957600080fd5b508035906001600160a01b03602082013516906040013561116e565b610365600480360360408110156105db57600080fd5b50803590602001356112f8565b610286611a3a565b6103656004803603602081101561060657600080fd5b5035611a40565b6103656004803603602081101561062357600080fd5b5035611bec565b6106326120de565b604080516001600160a01b039092168252519081900360200190f35b61026a6004803603602081101561066457600080fd5b50356120ed565b610365600480360360c081101561068157600080fd5b508035906001600160a01b03602082013581169160408101351515916060820135169060808101359060a00135612102565b6103656122d9565b610365600480360360608110156106d157600080fd5b506001600160a01b038135811691602081013591604090910135166122fc565b61070e6004803603602081101561070757600080fd5b503561235e565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b610286612398565b6102866004803603604081101561075457600080fd5b50803590602001356001600160a01b031661239e565b6102866004803603604081101561078057600080fd5b508035906020013561251b565b610365600480360360408110156107a357600080fd5b506001600160a01b0381351690602001351515612527565b6107e7600480360360408110156107d157600080fd5b50803590602001356001600160a01b03166125eb565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103656004803603602081101561082357600080fd5b503561261c565b6103656004803603602081101561084057600080fd5b5035612691565b6102866004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316612771565b6103656004803603602081101561088957600080fd5b50356001600160a01b03166127ec565b610365600480360360408110156108af57600080fd5b506001600160a01b0381351690602001351515612896565b610365600480360360408110156108dd57600080fd5b5080359060200135151561290a565b6103656004803603604081101561090257600080fd5b508035906020013515156129c1565b610632612a78565b6102866004803603604081101561092f57600080fd5b50803590602001356001600160a01b0316612a87565b61026a6004803603602081101561095b57600080fd5b50356001600160a01b0316612af2565b6103656004803603604081101561098157600080fd5b5080359060200135612b07565b610365600480360360408110156109a457600080fd5b5080359060200135612bd1565b610365600480360360408110156109c757600080fd5b5080359060200135613088565b600b6020526000908152604090205460ff1681565b60035490565b600080600385815481106109ff57fe5b60009182526020808320888452600480835260408086206001600160a01b038a811688529085528187208b885260079690960290930160038101855281872054818401548351632251caaf60e11b815293519299509697909690959416936344a3955e9383810193919291829003018186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d6020811015610aa857600080fd5b5051600285015490915042118015610abf57508015155b15610b50576000610ad485600201544261251b565b9050600060058981548110610ae557fe5b90600052602060002090600302016001015490506000610b28600654610b228960010154610b1c868861314390919063ffffffff16565b90613143565b9061319c565b9050610b4a610b4385610b2284670de0b6b3a7640000613143565b8690613203565b94505050505b60008781526001840160205260409020548354610b869190610b8090670de0b6b3a764000090610b229087613143565b9061325d565b9450505050505b9392505050565b60038181548110610ba157fe5b60009182526020909120600790910201805460018201546002830154600484015460058501546006909501546001600160a01b03948516965092949193169186565b60075481565b60065481565b6001546001600160a01b03163314610c385760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b8060038381548110610c4657fe5b9060005260206000209060070201600601819055505050565b60026000541415610ca5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610cf35760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b60055460101015610d355760405162461bcd60e51b8152600401808060200182810382526023815260200180613db26023913960400191505060405180910390fd5b610d3d6122d9565b604080516060810182526001600160a01b039384168152602081019283526000918101828152600580546001808201835591855292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600390940293840180546001600160a01b031916919097161790955592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29092019190915555565b6008546060906001600160a01b03163314610e4f5760405162461bcd60e51b8152600401808060200182810382526022815260200180613cd86022913960400191505060405180910390fd5b6060835160001415610e62575081610ee5565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b60208310610ead5780518252601f199092019160209182019101610e8e565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b60208310610f245780518252601f199092019160209182019101610f05565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610f86576040519150601f19603f3d011682016040523d82523d6000602084013e610f8b565b606091505b509150915081610fcc5760405162461bcd60e51b815260040180806020018281038252603f815260200180613d20603f913960400191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611041578181015183820152602001611029565b50505050905090810190601f16801561106e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156110a1578181015183820152602001611089565b50505050905090810190601f1680156110ce5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6001546001600160a01b031633146111325760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b806003838154811061114057fe5b9060005260206000209060070201600501819055505050565b60096020526000908152604090205460ff1681565b600260005414156111b4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146112025760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b60006005848154811061121157fe5b90600052602060002090600302019050600284101561126a576040805162461bcd60e51b815260206004820152601060248201526f18dbdc99481c995dd85c99081c1bdbdb60821b604482015290519081900360640190fd5b6001810154156112ba576040805162461bcd60e51b81526020600482015260166024820152756f6c6420706f6f6c207374696c6c2072756e6e696e6760501b604482015290519081900360640190fd5b6112c26122d9565b80546001600160a01b0319166001600160a01b039390931692909217825560018083019190915560006002909201829055905550565b6002600054141561133e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b600260009081553381526009602052604090205460ff166113ab57611362336132ba565b156113ab576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6000828152600c602052604090205460ff16156113f8576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b61140182611a40565b60006003838154811061141057fe5b60009182526020808320868452600482526040808520338652909252908320600380546007909402909201945092918690811061144957fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114a657600080fd5b505afa1580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b505160038054919250600091879081106114e657fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561154357600080fd5b505afa158015611557573d6000803e3d6000fd5b505050506040513d602081101561156d57600080fd5b5051600485015484549192506001600160a01b0316906115d4576040805162461bcd60e51b815260206004820152601c60248201527f5661756c747342616e6b3a20757365722e736861726573206973203000000000604482015290519081900360640190fd5b60008211611629576040805162461bcd60e51b815260206004820152601c60248201527f5661756c747342616e6b3a20736861726573546f74616c206973203000000000604482015290519081900360640190fd5b611632876132c0565b8354600090611647908490610b229087613143565b905080871115611655578096505b861561199e57600080836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169757600080fd5b505afa1580156116ab573d6000803e3d6000fd5b505050506040513d60208110156116c157600080fd5b50516040805163ad7a672f60e01b815290519192506000916001600160a01b0387169163ad7a672f916004808301926020929190829003018186803b15801561170957600080fd5b505afa15801561171d573d6000803e3d6000fd5b505050506040513d602081101561173357600080fd5b50516040805163f3fef3a360e01b8152336004820152602481018d905290519192506001600160a01b0387169163f3fef3a3916044808201926020929091908290030181600087803b15801561178857600080fd5b505af115801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505192506117c2858b8484613403565b505085548111156117d657600086556117e5565b85546117e2908261325d565b86555b8654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182f57600080fd5b505afa158015611843573d6000803e3d6000fd5b505050506040513d602081101561185957600080fd5b5051905088811015611869578098505b881561199b57336000908152600a602052604090205460ff168061189657506118928a33612771565b4210155b6118dc576040805162461bcd60e51b81526020600482015260126024820152712b30bab63a39a130b7359d10333937bd32b760711b604482015290519081900360640190fd5b6118e68a33612a87565b4210611907578754611902906001600160a01b0316338b613553565b611986565b6000611940612710610b2260038e8154811061191f57fe5b9060005260206000209060070201600501548d61314390919063ffffffff16565b9050600061194e8b8361325d565b6001548b5491925061196d916001600160a01b03908116911684613553565b8954611983906001600160a01b03163383613553565b50505b6004870154611995908a613203565b60048801555b50505b60055460005b818110156119f257600081815260038901602052604090205487546119d691670de0b6b3a764000091610b2291613143565b60008281526001808a01602052604090912091909155016119a4565b506040805189815290518a9133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050600160005550505050505050565b60055490565b600060038281548110611a4f57fe5b6000918252602090912060079091020180549091506001600160a01b0316611a775750611be9565b80600201544211611a885750611be9565b60008160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d6020811015611b0457600080fd5b5051905080611b1a575042600290910155611be9565b6000611b2a83600201544261251b565b905060008111611b3c57505050611be9565b60055460005b81811015611be357600060058281548110611b5957fe5b90600052602060002090600302016001015490506000611b90600654610b228960010154610b1c868a61314390919063ffffffff16565b9050611bc2611bab87610b2284670de0b6b3a7640000613143565b600085815260038a01602052604090205490613203565b60008481526003890160205260409020555050426002860155600101611b42565b50505050505b50565b3360009081526009602052604090205460ff16611c5557611c0c336132ba565b15611c55576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b60026000541415611c9b576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000908155818152600c602052604090205460ff1615611ced576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b600060038281548110611cfc57fe5b600091825260208083208584526004825260408085203386529092529083206003805460079094029092019450929185908110611d3557fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9257600080fd5b505afa158015611da6573d6000803e3d6000fd5b505050506040513d6020811015611dbc57600080fd5b50516003805491925060009186908110611dd257fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2f57600080fd5b505afa158015611e43573d6000803e3d6000fd5b505050506040513d6020811015611e5957600080fd5b50518354909150600090611e73908390610b229086613143565b905060038681548110611e8257fe5b6000918252602080832060046007909302018201546040805163f3fef3a360e01b8152339481019490945260248401869052516001600160a01b039091169363f3fef3a3936044808201949392918390030190829087803b158015611ee657600080fd5b505af1158015611efa573d6000803e3d6000fd5b505050506040513d6020811015611f1057600080fd5b5050801561206b57336000908152600a602052604090205460ff1680611f3f5750611f3b8633612771565b4210155b611f85576040805162461bcd60e51b81526020600482015260126024820152712b30bab63a39a130b7359d10333937bd32b760711b604482015290519081900360640190fd5b611f8f8633612a87565b4210611fb0578454611fab906001600160a01b03163383613553565b612056565b600060038781548110611fbf57fe5b9060005260206000209060070201600501541115612056576000612010612710610b2260038a81548110611fef57fe5b9060005260206000209060070201600501548561314390919063ffffffff16565b9050600061201e838361325d565b600154885491925061203d916001600160a01b03908116911684613553565b8654612053906001600160a01b03163383613553565b50505b60048401546120659082613203565b60048501555b604080518281529051879133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a36000808555600554905b818110156120cf57600081815260018088016020526040822091909155016120ac565b50506001600055505050505050565b6001546001600160a01b031681565b600c6020526000908152604090205460ff1681565b6001546001600160a01b0316331461214b5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b8315612159576121596122d9565b6000600254421161216c5760025461216e565b425b60065490915061217e9088613203565b6006556040805160c0810182526001600160a01b03978816815260208101988952908101918252938616606085019081526080850193845260a0850192835260038054600181018255600091909152945160079095027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549689166001600160a01b031997881617905597517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c89015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d880155517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f870180549190961693169290921790935591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86084015550517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86190910155565b60035460005b818110156122f8576122f081611a40565b6001016122df565b5050565b6008546001600160a01b031633146123455760405162461bcd60e51b8152600401808060200182810382526022815260200180613cd86022913960400191505060405180910390fd5b6123596001600160a01b0384168284613553565b505050565b6005818154811061236b57fe5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116925083565b60025481565b600080600384815481106123ae57fe5b60009182526020808320878452600480835260408086206001600160a01b03808b1688529085528187206007909602909301828101548251632251caaf60e11b81529251919850959695909316936344a3955e93828401939192909190829003018186803b15801561241f57600080fd5b505afa158015612433573d6000803e3d6000fd5b505050506040513d602081101561244957600080fd5b5051600380549192506000918890811061245f57fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d60208110156124e657600080fd5b50519050816124fc576000945050505050612515565b825461250e908390610b229084613143565b9450505050505b92915050565b6000610b8d828461325d565b6002600054141561256d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146125bb5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6001600160a01b03919091166000908152600a60205260408120805460ff19169215159290921790915560019055565b6004602081815260009384526040808520909152918352912080546002820154600383015492909301549092919084565b3360009081526009602052604090205460ff166126855761263c336132ba565b15612685576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b611be9816000196112f8565b600260005414156126d7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146127255760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b62093a808111156127675760405162461bcd60e51b815260040180806020018281038252602a815260200180613e20602a913960400191505060405180910390fd5b6007556001600055565b6001600160a01b0381166000908152600a602052604081205460ff166127c05760075460008481526004602090815260408083206001600160a01b038716845290915290206002015401610b8d565b5060009182526004602090815260408084206001600160a01b0393909316845291905290206002015490565b6008546001600160a01b031633148061282357506008546001600160a01b031615801561282357506001546001600160a01b031633145b612874576040805162461bcd60e51b815260206004820152601760248201527f5661756c747342616e6b3a2021617574686f7269736564000000000000000000604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146128df5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60026000541415612950576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b0316331461299e5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6000918252600c60205260408220805460ff191691151591909117905560019055565b60026000541415612a07576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612a555760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6000918252600b60205260408220805460ff191691151591909117905560019055565b6008546001600160a01b031681565b6001600160a01b0381166000908152600a602052604081205460ff166127c05760038381548110612ab457fe5b60009182526020808320600660079093020191909101548583526004825260408084206001600160a01b038716855290925291206002015401610b8d565b600a6020526000908152604090205460ff1681565b60026000541415612b4d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612b9b5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b612ba36122d9565b600060058381548110612bb257fe5b6000918252602082206001600390920201810193909355919091555050565b60026000541415612c17576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b600260009081553381526009602052604090205460ff16612c8457612c3b336132ba565b15612c84576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6000828152600c602052604090205460ff1615612cd1576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b612cda82611a40565b600060038381548110612ce957fe5b60009182526020808320868452600482526040808520338652909252922080546007909202909201925015612d2157612d21846132c0565b8215612ff0578154600480840154604080516370a0823160e01b81523093810193909352516001600160a01b03938416939091169160009184916370a08231916024808301926020929190829003018186803b158015612d8057600080fd5b505afa158015612d94573d6000803e3d6000fd5b505050506040513d6020811015612daa57600080fd5b50519050612dc36001600160a01b0384163330896135a5565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612e1257600080fd5b505afa158015612e26573d6000803e3d6000fd5b505050506040513d6020811015612e3c57600080fd5b505182810397509050612e596001600160a01b03851684896135ff565b600080846001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9557600080fd5b505afa158015612ea9573d6000803e3d6000fd5b505050506040513d6020811015612ebf57600080fd5b50516040805163ad7a672f60e01b815290519192506000916001600160a01b0388169163ad7a672f916004808301926020929190829003018186803b158015612f0757600080fd5b505afa158015612f1b573d6000803e3d6000fd5b505050506040513d6020811015612f3157600080fd5b5051604080516311f9fbc960e21b8152336004820152602481018d905290519192506001600160a01b038816916347e7ef24916044808201926020929091908290030181600087803b158015612f8657600080fd5b505af1158015612f9a573d6000803e3d6000fd5b505050506040513d6020811015612fb057600080fd5b50519250612fc0868b84846136ea565b50508554612fce9082613203565b86556003860154612fdf9089613203565b600387015550504260028501555050505b60055460005b81811015613044576000818152600385016020526040902054835461302891670de0b6b3a764000091610b2291613143565b6000828152600180860160205260409091209190915501612ff6565b50604080518581529051869133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350506001600055505050565b6001546001600160a01b031633146130d15760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6130d96122d9565b61311681613110600385815481106130ed57fe5b90600052602060002090600702016001015460065461325d90919063ffffffff16565b90613203565b600681905550806003838154811061312a57fe5b9060005260206000209060070201600101819055505050565b60008261315257506000612515565b8282028284828161315f57fe5b0414610b8d5760405162461bcd60e51b8152600401808060200182810382526021815260200180613dd56021913960400191505060405180910390fd5b60008082116131f2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816131fb57fe5b049392505050565b600082820183811015610b8d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000828211156132b4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b6000600382815481106132cf57fe5b6000918252602080832085845260048252604080852033865290925290832060055460079093029091019350915b818110156133fc576000818152600b602052604090205460ff166133f45760008181526001840160209081526040808320546003880190925282205485546133589291610b8091670de0b6b3a764000091610b229190613143565b905080156133f25760006005838154811061336f57fe5b6000918252602090912060039091020180549091506001600160a01b0316613398813385613834565b60028201546133a79084613203565b600283015560408051848152905133916001600160a01b0384169187917f56a43be815d86b39dc4d398124c956790410b5e9cf70d477de0299f25fc18313919081900360200190a450505b505b6001016132fd565b5050505050565b836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561343c57600080fd5b505afa158015613450573d6000803e3d6000fd5b505050506040513d602081101561346657600080fd5b505183018211156134a85760405162461bcd60e51b815260040180806020018281038252602d815260200180613d85602d913960400191505060405180910390fd5b836001600160a01b031663ad7a672f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d602081101561350b57600080fd5b5051830181111561354d5760405162461bcd60e51b815260040180806020018281038252602c815260200180613c8c602c913960400191505060405180910390fd5b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526123599084906139c3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261354d9085906139c3565b600061369582856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561366357600080fd5b505afa158015613677573d6000803e3d6000fd5b505050506040513d602081101561368d57600080fd5b505190613203565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061354d9085906139c3565b836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561372357600080fd5b505afa158015613737573d6000803e3d6000fd5b505050506040513d602081101561374d57600080fd5b5051828401111561378f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613d85602d913960400191505060405180910390fd5b836001600160a01b031663ad7a672f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156137c857600080fd5b505afa1580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b5051818401111561354d5760405162461bcd60e51b815260040180806020018281038252602c815260200180613c8c602c913960400191505060405180910390fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d60208110156138ad57600080fd5b505190508082111561394257836001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561391057600080fd5b505af1158015613924573d6000803e3d6000fd5b505050506040513d602081101561393a57600080fd5b5061354d9050565b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561399957600080fd5b505af11580156139ad573d6000803e3d6000fd5b505050506040513d6020811015611be357600080fd5b6060613a18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a749092919063ffffffff16565b80519091501561235957808060200190516020811015613a3757600080fd5b50516123595760405162461bcd60e51b815260040180806020018281038252602a815260200180613df6602a913960400191505060405180910390fd5b6060613a838484600085613a8b565b949350505050565b606082471015613acc5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d5f6026913960400191505060405180910390fd5b613ad5856132ba565b613b26576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613b655780518252601f199092019160209182019101613b46565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613bc7576040519150601f19603f3d011682016040523d82523d6000602084013e613bcc565b606091505b5091509150613bdc828286613be7565b979650505050505050565b60608315613bf6575081610b8d565b825115613c065782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c50578181015183820152602001613c38565b50505050905090810190601f168015613c7d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe53686f7274206f6620737472617465677920746f74616c2062616c616e63653a206e656564206175646974215265656e7472616e637947756172643a207265656e7472616e742063616c6c005661756c747342616e6b3a2063616c6c6572206973206e6f742074696d656c6f636b5661756c747342616e6b3a2063616c6c6572206973206e6f7420746865206f70657261746f725661756c747342616e6b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c53686f7274206f6620737472617465677920696e6661726d2062616c616e63653a206e656564206175646974215661756c747342616e6b3a2052657761726420706f6f6c206c656e677468203e203136536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645661756c747342616e6b3a202173616665202d20646f6e74206c6f636b20666f7220746f6f206c6f6e67a26469706673582212208b2313ab73db44b3eec350afd1c4f5e888b8fbb9d7eb441810f20449fb7f964d64736f6c634300060c003300000000000000000000000071fd21a764ef295fb7bfbdf4d2ebffe862e76fbf
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806367206d401161013b578063bdacb303116100b8578063d603fc061161007c578063d603fc0614610919578063d936547e14610945578063ddd5c8a21461096b578063e2bbb1581461098e578063e80d9217146109b157610248565b8063bdacb30314610873578063c421449214610899578063ceb2c11c146108c7578063cecd9a6a146108ec578063d33219b41461091157610248565b80639281aa0b116100ff5780639281aa0b1461078d57806393f1a40b146107bb578063958e2d311461080d5780639da953261461082a578063afebb2ad1461084757610248565b806367206d40146106bb57806372aa0a60146106f157806378e97925146107365780637b84daec1461073e5780638dbb1e3a1461076a57610248565b806328836fd7116101c95780635312ea8e1161018d5780635312ea8e1461060d578063570ca7351461062a5780635e8ead771461064e5780635ed51d4c1461066b578063630b5ba1146106b357610248565b806328836fd71461056d5780633f16490514610593578063441a3e70146105c55780635021c6bb146105e857806351eb05a6146105f057610248565b806317caf6f11161021057806317caf6f11461033a5780631a4901c7146103425780631c5ef433146103675780632224fa2514610393578063225db2261461054a57610248565b8063045ff1bb1461024d578063081e3eda1461027e5780630abc92cb146102985780631526fe27146102ca57806317837baa14610332575b600080fd5b61026a6004803603602081101561026357600080fd5b50356109d4565b604080519115158252519081900360200190f35b6102866109e9565b60408051918252519081900360200190f35b610286600480360360608110156102ae57600080fd5b50803590602081013590604001356001600160a01b03166109ef565b6102e7600480360360208110156102e057600080fd5b5035610b94565b60405180876001600160a01b03168152602001868152602001858152602001846001600160a01b03168152602001838152602001828152602001965050505050505060405180910390f35b610286610be3565b610286610be9565b6103656004803603604081101561035857600080fd5b5080359060200135610bef565b005b6103656004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610c5f565b6104d5600480360360808110156103a957600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184600183028401116401000000008311171561040d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e03945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561050f5781810151838201526020016104f7565b50505050905090810190601f16801561053c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103656004803603604081101561056057600080fd5b50803590602001356110e9565b61026a6004803603602081101561058357600080fd5b50356001600160a01b0316611159565b610365600480360360608110156105a957600080fd5b508035906001600160a01b03602082013516906040013561116e565b610365600480360360408110156105db57600080fd5b50803590602001356112f8565b610286611a3a565b6103656004803603602081101561060657600080fd5b5035611a40565b6103656004803603602081101561062357600080fd5b5035611bec565b6106326120de565b604080516001600160a01b039092168252519081900360200190f35b61026a6004803603602081101561066457600080fd5b50356120ed565b610365600480360360c081101561068157600080fd5b508035906001600160a01b03602082013581169160408101351515916060820135169060808101359060a00135612102565b6103656122d9565b610365600480360360608110156106d157600080fd5b506001600160a01b038135811691602081013591604090910135166122fc565b61070e6004803603602081101561070757600080fd5b503561235e565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b610286612398565b6102866004803603604081101561075457600080fd5b50803590602001356001600160a01b031661239e565b6102866004803603604081101561078057600080fd5b508035906020013561251b565b610365600480360360408110156107a357600080fd5b506001600160a01b0381351690602001351515612527565b6107e7600480360360408110156107d157600080fd5b50803590602001356001600160a01b03166125eb565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103656004803603602081101561082357600080fd5b503561261c565b6103656004803603602081101561084057600080fd5b5035612691565b6102866004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316612771565b6103656004803603602081101561088957600080fd5b50356001600160a01b03166127ec565b610365600480360360408110156108af57600080fd5b506001600160a01b0381351690602001351515612896565b610365600480360360408110156108dd57600080fd5b5080359060200135151561290a565b6103656004803603604081101561090257600080fd5b508035906020013515156129c1565b610632612a78565b6102866004803603604081101561092f57600080fd5b50803590602001356001600160a01b0316612a87565b61026a6004803603602081101561095b57600080fd5b50356001600160a01b0316612af2565b6103656004803603604081101561098157600080fd5b5080359060200135612b07565b610365600480360360408110156109a457600080fd5b5080359060200135612bd1565b610365600480360360408110156109c757600080fd5b5080359060200135613088565b600b6020526000908152604090205460ff1681565b60035490565b600080600385815481106109ff57fe5b60009182526020808320888452600480835260408086206001600160a01b038a811688529085528187208b885260079690960290930160038101855281872054818401548351632251caaf60e11b815293519299509697909690959416936344a3955e9383810193919291829003018186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d6020811015610aa857600080fd5b5051600285015490915042118015610abf57508015155b15610b50576000610ad485600201544261251b565b9050600060058981548110610ae557fe5b90600052602060002090600302016001015490506000610b28600654610b228960010154610b1c868861314390919063ffffffff16565b90613143565b9061319c565b9050610b4a610b4385610b2284670de0b6b3a7640000613143565b8690613203565b94505050505b60008781526001840160205260409020548354610b869190610b8090670de0b6b3a764000090610b229087613143565b9061325d565b9450505050505b9392505050565b60038181548110610ba157fe5b60009182526020909120600790910201805460018201546002830154600484015460058501546006909501546001600160a01b03948516965092949193169186565b60075481565b60065481565b6001546001600160a01b03163314610c385760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b8060038381548110610c4657fe5b9060005260206000209060070201600601819055505050565b60026000541415610ca5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610cf35760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b60055460101015610d355760405162461bcd60e51b8152600401808060200182810382526023815260200180613db26023913960400191505060405180910390fd5b610d3d6122d9565b604080516060810182526001600160a01b039384168152602081019283526000918101828152600580546001808201835591855292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600390940293840180546001600160a01b031916919097161790955592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29092019190915555565b6008546060906001600160a01b03163314610e4f5760405162461bcd60e51b8152600401808060200182810382526022815260200180613cd86022913960400191505060405180910390fd5b6060835160001415610e62575081610ee5565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b60208310610ead5780518252601f199092019160209182019101610e8e565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b60208310610f245780518252601f199092019160209182019101610f05565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610f86576040519150601f19603f3d011682016040523d82523d6000602084013e610f8b565b606091505b509150915081610fcc5760405162461bcd60e51b815260040180806020018281038252603f815260200180613d20603f913960400191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611041578181015183820152602001611029565b50505050905090810190601f16801561106e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156110a1578181015183820152602001611089565b50505050905090810190601f1680156110ce5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6001546001600160a01b031633146111325760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b806003838154811061114057fe5b9060005260206000209060070201600501819055505050565b60096020526000908152604090205460ff1681565b600260005414156111b4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146112025760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b60006005848154811061121157fe5b90600052602060002090600302019050600284101561126a576040805162461bcd60e51b815260206004820152601060248201526f18dbdc99481c995dd85c99081c1bdbdb60821b604482015290519081900360640190fd5b6001810154156112ba576040805162461bcd60e51b81526020600482015260166024820152756f6c6420706f6f6c207374696c6c2072756e6e696e6760501b604482015290519081900360640190fd5b6112c26122d9565b80546001600160a01b0319166001600160a01b039390931692909217825560018083019190915560006002909201829055905550565b6002600054141561133e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b600260009081553381526009602052604090205460ff166113ab57611362336132ba565b156113ab576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6000828152600c602052604090205460ff16156113f8576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b61140182611a40565b60006003838154811061141057fe5b60009182526020808320868452600482526040808520338652909252908320600380546007909402909201945092918690811061144957fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114a657600080fd5b505afa1580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b505160038054919250600091879081106114e657fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561154357600080fd5b505afa158015611557573d6000803e3d6000fd5b505050506040513d602081101561156d57600080fd5b5051600485015484549192506001600160a01b0316906115d4576040805162461bcd60e51b815260206004820152601c60248201527f5661756c747342616e6b3a20757365722e736861726573206973203000000000604482015290519081900360640190fd5b60008211611629576040805162461bcd60e51b815260206004820152601c60248201527f5661756c747342616e6b3a20736861726573546f74616c206973203000000000604482015290519081900360640190fd5b611632876132c0565b8354600090611647908490610b229087613143565b905080871115611655578096505b861561199e57600080836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169757600080fd5b505afa1580156116ab573d6000803e3d6000fd5b505050506040513d60208110156116c157600080fd5b50516040805163ad7a672f60e01b815290519192506000916001600160a01b0387169163ad7a672f916004808301926020929190829003018186803b15801561170957600080fd5b505afa15801561171d573d6000803e3d6000fd5b505050506040513d602081101561173357600080fd5b50516040805163f3fef3a360e01b8152336004820152602481018d905290519192506001600160a01b0387169163f3fef3a3916044808201926020929091908290030181600087803b15801561178857600080fd5b505af115801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505192506117c2858b8484613403565b505085548111156117d657600086556117e5565b85546117e2908261325d565b86555b8654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182f57600080fd5b505afa158015611843573d6000803e3d6000fd5b505050506040513d602081101561185957600080fd5b5051905088811015611869578098505b881561199b57336000908152600a602052604090205460ff168061189657506118928a33612771565b4210155b6118dc576040805162461bcd60e51b81526020600482015260126024820152712b30bab63a39a130b7359d10333937bd32b760711b604482015290519081900360640190fd5b6118e68a33612a87565b4210611907578754611902906001600160a01b0316338b613553565b611986565b6000611940612710610b2260038e8154811061191f57fe5b9060005260206000209060070201600501548d61314390919063ffffffff16565b9050600061194e8b8361325d565b6001548b5491925061196d916001600160a01b03908116911684613553565b8954611983906001600160a01b03163383613553565b50505b6004870154611995908a613203565b60048801555b50505b60055460005b818110156119f257600081815260038901602052604090205487546119d691670de0b6b3a764000091610b2291613143565b60008281526001808a01602052604090912091909155016119a4565b506040805189815290518a9133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050600160005550505050505050565b60055490565b600060038281548110611a4f57fe5b6000918252602090912060079091020180549091506001600160a01b0316611a775750611be9565b80600201544211611a885750611be9565b60008160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d6020811015611b0457600080fd5b5051905080611b1a575042600290910155611be9565b6000611b2a83600201544261251b565b905060008111611b3c57505050611be9565b60055460005b81811015611be357600060058281548110611b5957fe5b90600052602060002090600302016001015490506000611b90600654610b228960010154610b1c868a61314390919063ffffffff16565b9050611bc2611bab87610b2284670de0b6b3a7640000613143565b600085815260038a01602052604090205490613203565b60008481526003890160205260409020555050426002860155600101611b42565b50505050505b50565b3360009081526009602052604090205460ff16611c5557611c0c336132ba565b15611c55576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b60026000541415611c9b576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000908155818152600c602052604090205460ff1615611ced576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b600060038281548110611cfc57fe5b600091825260208083208584526004825260408085203386529092529083206003805460079094029092019450929185908110611d3557fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9257600080fd5b505afa158015611da6573d6000803e3d6000fd5b505050506040513d6020811015611dbc57600080fd5b50516003805491925060009186908110611dd257fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166344a3955e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2f57600080fd5b505afa158015611e43573d6000803e3d6000fd5b505050506040513d6020811015611e5957600080fd5b50518354909150600090611e73908390610b229086613143565b905060038681548110611e8257fe5b6000918252602080832060046007909302018201546040805163f3fef3a360e01b8152339481019490945260248401869052516001600160a01b039091169363f3fef3a3936044808201949392918390030190829087803b158015611ee657600080fd5b505af1158015611efa573d6000803e3d6000fd5b505050506040513d6020811015611f1057600080fd5b5050801561206b57336000908152600a602052604090205460ff1680611f3f5750611f3b8633612771565b4210155b611f85576040805162461bcd60e51b81526020600482015260126024820152712b30bab63a39a130b7359d10333937bd32b760711b604482015290519081900360640190fd5b611f8f8633612a87565b4210611fb0578454611fab906001600160a01b03163383613553565b612056565b600060038781548110611fbf57fe5b9060005260206000209060070201600501541115612056576000612010612710610b2260038a81548110611fef57fe5b9060005260206000209060070201600501548561314390919063ffffffff16565b9050600061201e838361325d565b600154885491925061203d916001600160a01b03908116911684613553565b8654612053906001600160a01b03163383613553565b50505b60048401546120659082613203565b60048501555b604080518281529051879133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a36000808555600554905b818110156120cf57600081815260018088016020526040822091909155016120ac565b50506001600055505050505050565b6001546001600160a01b031681565b600c6020526000908152604090205460ff1681565b6001546001600160a01b0316331461214b5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b8315612159576121596122d9565b6000600254421161216c5760025461216e565b425b60065490915061217e9088613203565b6006556040805160c0810182526001600160a01b03978816815260208101988952908101918252938616606085019081526080850193845260a0850192835260038054600181018255600091909152945160079095027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549689166001600160a01b031997881617905597517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c89015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d880155517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f870180549190961693169290921790935591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86084015550517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86190910155565b60035460005b818110156122f8576122f081611a40565b6001016122df565b5050565b6008546001600160a01b031633146123455760405162461bcd60e51b8152600401808060200182810382526022815260200180613cd86022913960400191505060405180910390fd5b6123596001600160a01b0384168284613553565b505050565b6005818154811061236b57fe5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116925083565b60025481565b600080600384815481106123ae57fe5b60009182526020808320878452600480835260408086206001600160a01b03808b1688529085528187206007909602909301828101548251632251caaf60e11b81529251919850959695909316936344a3955e93828401939192909190829003018186803b15801561241f57600080fd5b505afa158015612433573d6000803e3d6000fd5b505050506040513d602081101561244957600080fd5b5051600380549192506000918890811061245f57fe5b906000526020600020906007020160040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d60208110156124e657600080fd5b50519050816124fc576000945050505050612515565b825461250e908390610b229084613143565b9450505050505b92915050565b6000610b8d828461325d565b6002600054141561256d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146125bb5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6001600160a01b03919091166000908152600a60205260408120805460ff19169215159290921790915560019055565b6004602081815260009384526040808520909152918352912080546002820154600383015492909301549092919084565b3360009081526009602052604090205460ff166126855761263c336132ba565b15612685576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b611be9816000196112f8565b600260005414156126d7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146127255760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b62093a808111156127675760405162461bcd60e51b815260040180806020018281038252602a815260200180613e20602a913960400191505060405180910390fd5b6007556001600055565b6001600160a01b0381166000908152600a602052604081205460ff166127c05760075460008481526004602090815260408083206001600160a01b038716845290915290206002015401610b8d565b5060009182526004602090815260408084206001600160a01b0393909316845291905290206002015490565b6008546001600160a01b031633148061282357506008546001600160a01b031615801561282357506001546001600160a01b031633145b612874576040805162461bcd60e51b815260206004820152601760248201527f5661756c747342616e6b3a2021617574686f7269736564000000000000000000604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146128df5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60026000541415612950576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b0316331461299e5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6000918252600c60205260408220805460ff191691151591909117905560019055565b60026000541415612a07576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612a555760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6000918252600b60205260408220805460ff191691151591909117905560019055565b6008546001600160a01b031681565b6001600160a01b0381166000908152600a602052604081205460ff166127c05760038381548110612ab457fe5b60009182526020808320600660079093020191909101548583526004825260408084206001600160a01b038716855290925291206002015401610b8d565b600a6020526000908152604090205460ff1681565b60026000541415612b4d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612b9b5760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b612ba36122d9565b600060058381548110612bb257fe5b6000918252602082206001600390920201810193909355919091555050565b60026000541415612c17576040805162461bcd60e51b815260206004820152601f6024820152600080516020613cb8833981519152604482015290519081900360640190fd5b600260009081553381526009602052604090205460ff16612c8457612c3b336132ba565b15612c84576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b6000828152600c602052604090205460ff1615612cd1576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b612cda82611a40565b600060038381548110612ce957fe5b60009182526020808320868452600482526040808520338652909252922080546007909202909201925015612d2157612d21846132c0565b8215612ff0578154600480840154604080516370a0823160e01b81523093810193909352516001600160a01b03938416939091169160009184916370a08231916024808301926020929190829003018186803b158015612d8057600080fd5b505afa158015612d94573d6000803e3d6000fd5b505050506040513d6020811015612daa57600080fd5b50519050612dc36001600160a01b0384163330896135a5565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612e1257600080fd5b505afa158015612e26573d6000803e3d6000fd5b505050506040513d6020811015612e3c57600080fd5b505182810397509050612e596001600160a01b03851684896135ff565b600080846001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9557600080fd5b505afa158015612ea9573d6000803e3d6000fd5b505050506040513d6020811015612ebf57600080fd5b50516040805163ad7a672f60e01b815290519192506000916001600160a01b0388169163ad7a672f916004808301926020929190829003018186803b158015612f0757600080fd5b505afa158015612f1b573d6000803e3d6000fd5b505050506040513d6020811015612f3157600080fd5b5051604080516311f9fbc960e21b8152336004820152602481018d905290519192506001600160a01b038816916347e7ef24916044808201926020929091908290030181600087803b158015612f8657600080fd5b505af1158015612f9a573d6000803e3d6000fd5b505050506040513d6020811015612fb057600080fd5b50519250612fc0868b84846136ea565b50508554612fce9082613203565b86556003860154612fdf9089613203565b600387015550504260028501555050505b60055460005b81811015613044576000818152600385016020526040902054835461302891670de0b6b3a764000091610b2291613143565b6000828152600180860160205260409091209190915501612ff6565b50604080518581529051869133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350506001600055505050565b6001546001600160a01b031633146130d15760405162461bcd60e51b8152600401808060200182810382526026815260200180613cfa6026913960400191505060405180910390fd5b6130d96122d9565b61311681613110600385815481106130ed57fe5b90600052602060002090600702016001015460065461325d90919063ffffffff16565b90613203565b600681905550806003838154811061312a57fe5b9060005260206000209060070201600101819055505050565b60008261315257506000612515565b8282028284828161315f57fe5b0414610b8d5760405162461bcd60e51b8152600401808060200182810382526021815260200180613dd56021913960400191505060405180910390fd5b60008082116131f2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816131fb57fe5b049392505050565b600082820183811015610b8d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000828211156132b4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b6000600382815481106132cf57fe5b6000918252602080832085845260048252604080852033865290925290832060055460079093029091019350915b818110156133fc576000818152600b602052604090205460ff166133f45760008181526001840160209081526040808320546003880190925282205485546133589291610b8091670de0b6b3a764000091610b229190613143565b905080156133f25760006005838154811061336f57fe5b6000918252602090912060039091020180549091506001600160a01b0316613398813385613834565b60028201546133a79084613203565b600283015560408051848152905133916001600160a01b0384169187917f56a43be815d86b39dc4d398124c956790410b5e9cf70d477de0299f25fc18313919081900360200190a450505b505b6001016132fd565b5050505050565b836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561343c57600080fd5b505afa158015613450573d6000803e3d6000fd5b505050506040513d602081101561346657600080fd5b505183018211156134a85760405162461bcd60e51b815260040180806020018281038252602d815260200180613d85602d913960400191505060405180910390fd5b836001600160a01b031663ad7a672f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d602081101561350b57600080fd5b5051830181111561354d5760405162461bcd60e51b815260040180806020018281038252602c815260200180613c8c602c913960400191505060405180910390fd5b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526123599084906139c3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261354d9085906139c3565b600061369582856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561366357600080fd5b505afa158015613677573d6000803e3d6000fd5b505050506040513d602081101561368d57600080fd5b505190613203565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905290915061354d9085906139c3565b836001600160a01b031663bb97517e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561372357600080fd5b505afa158015613737573d6000803e3d6000fd5b505050506040513d602081101561374d57600080fd5b5051828401111561378f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613d85602d913960400191505060405180910390fd5b836001600160a01b031663ad7a672f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156137c857600080fd5b505afa1580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b5051818401111561354d5760405162461bcd60e51b815260040180806020018281038252602c815260200180613c8c602c913960400191505060405180910390fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d60208110156138ad57600080fd5b505190508082111561394257836001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561391057600080fd5b505af1158015613924573d6000803e3d6000fd5b505050506040513d602081101561393a57600080fd5b5061354d9050565b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561399957600080fd5b505af11580156139ad573d6000803e3d6000fd5b505050506040513d6020811015611be357600080fd5b6060613a18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a749092919063ffffffff16565b80519091501561235957808060200190516020811015613a3757600080fd5b50516123595760405162461bcd60e51b815260040180806020018281038252602a815260200180613df6602a913960400191505060405180910390fd5b6060613a838484600085613a8b565b949350505050565b606082471015613acc5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d5f6026913960400191505060405180910390fd5b613ad5856132ba565b613b26576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613b655780518252601f199092019160209182019101613b46565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613bc7576040519150601f19603f3d011682016040523d82523d6000602084013e613bcc565b606091505b5091509150613bdc828286613be7565b979650505050505050565b60608315613bf6575081610b8d565b825115613c065782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c50578181015183820152602001613c38565b50505050905090810190601f168015613c7d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe53686f7274206f6620737472617465677920746f74616c2062616c616e63653a206e656564206175646974215265656e7472616e637947756172643a207265656e7472616e742063616c6c005661756c747342616e6b3a2063616c6c6572206973206e6f742074696d656c6f636b5661756c747342616e6b3a2063616c6c6572206973206e6f7420746865206f70657261746f725661756c747342616e6b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c53686f7274206f6620737472617465677920696e6661726d2062616c616e63653a206e656564206175646974215661756c747342616e6b3a2052657761726420706f6f6c206c656e677468203e203136536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645661756c747342616e6b3a202173616665202d20646f6e74206c6f636b20666f7220746f6f206c6f6e67a26469706673582212208b2313ab73db44b3eec350afd1c4f5e888b8fbb9d7eb441810f20449fb7f964d64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000071fd21a764ef295fb7bfbdf4d2ebffe862e76fbf
-----Decoded View---------------
Arg [0] : _operator (address): 0x71FD21a764eF295fB7BFBdf4D2EBfFE862e76fBf
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000071fd21a764ef295fb7bfbdf4d2ebffe862e76fbf
Deployed Bytecode Sourcemap
26397:20568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28449:46;;;;;;;;;;;;;;;;-1:-1:-1;28449:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;29536:95;;;:::i;:::-;;;;;;;;;;;;;;;;32871:917;;;;;;;;;;;;;;;;-1:-1:-1;32871:917:0;;;;;;;;;;;-1:-1:-1;;;;;32871:917:0;;:::i;27741:26::-;;;;;;;;;;;;;;;;-1:-1:-1;27741:26:0;;:::i;:::-;;;;;-1:-1:-1;;;;;27741:26:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27741:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28080:44;;;:::i;27956:34::-;;;:::i;30852:164::-;;;;;;;;;;;;;;;;-1:-1:-1;30852:164:0;;;;;;;:::i;:::-;;31139:398;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31139:398:0;;;;;;;;:::i;46240:722::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46240:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46240:722:0;;;;;;;;-1:-1:-1;46240:722:0;;-1:-1:-1;;46240:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46240:722:0;;-1:-1:-1;46240:722:0;;-1:-1:-1;;;;;46240:722:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30684:160;;;;;;;;;;;;;;;;-1:-1:-1;30684:160:0;;;;;;;:::i;28341:51::-;;;;;;;;;;;;;;;;-1:-1:-1;28341:51:0;-1:-1:-1;;;;;28341:51:0;;:::i;31545:517::-;;;;;;;;;;;;;;;;-1:-1:-1;31545:517:0;;;-1:-1:-1;;;;;31545:517:0;;;;;;;;;;:::i;40028:2743::-;;;;;;;;;;;;;;;;-1:-1:-1;40028:2743:0;;;;;;;:::i;31024:107::-;;;:::i;34692:1127::-;;;;;;;;;;;;;;;;-1:-1:-1;34692:1127:0;;:::i;42953:1599::-;;;;;;;;;;;;;;;;-1:-1:-1;42953:1599:0;;:::i;26530:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;26530:23:0;;;;;;;;;;;;;;28502:41;;;;;;;;;;;;;;;;-1:-1:-1;28502:41:0;;:::i;29639:683::-;;;;;;;;;;;;;;;;-1:-1:-1;29639:683:0;;;-1:-1:-1;;;;;29639:683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34436:180::-;;;:::i;45909:158::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45909:158:0;;;;;;;;;;;;;;;;;:::i;27911:38::-;;;;;;;;;;;;;;;;-1:-1:-1;27911:38:0;;:::i;:::-;;;;-1:-1:-1;;;;;27911:38:0;;;;;;;;;;;;;;;;;;;;;;;;;27708:24;;;:::i;33857:496::-;;;;;;;;;;;;;;;;-1:-1:-1;33857:496:0;;;;;;-1:-1:-1;;;;;33857:496:0;;:::i;32685:121::-;;;;;;;;;;;;;;;;-1:-1:-1;32685:121:0;;;;;;;:::i;45016:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45016:151:0;;;;;;;;;;:::i;27796:64::-;;;;;;;;;;;;;;;;-1:-1:-1;27796:64:0;;;;;;-1:-1:-1;;;;;27796:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42779:103;;;;;;;;;;;;;;;;-1:-1:-1;42779:103:0;;:::i;32355:254::-;;;;;;;;;;;;;;;;-1:-1:-1;32355:254:0;;:::i;39468:242::-;;;;;;;;;;;;;;;;-1:-1:-1;39468:242:0;;;;;;-1:-1:-1;;;;;39468:242:0;;:::i;45690:211::-;;;;;;;;;;;;;;;;-1:-1:-1;45690:211:0;-1:-1:-1;;;;;45690:211:0;;:::i;45175:156::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45175:156:0;;;;;;;;;;:::i;45502:135::-;;;;;;;;;;;;;;;;-1:-1:-1;45502:135:0;;;;;;;;;:::i;45339:155::-;;;;;;;;;;;;;;;;-1:-1:-1;45339:155:0;;;;;;;;;:::i;28133:77::-;;;:::i;39718:258::-;;;;;;;;;;;;;;;;-1:-1:-1;39718:258:0;;;;;;-1:-1:-1;;;;;39718:258:0;;:::i;28399:43::-;;;;;;;;;;;;;;;;-1:-1:-1;28399:43:0;-1:-1:-1;;;;;28399:43:0;;:::i;32070:277::-;;;;;;;;;;;;;;;;-1:-1:-1;32070:277:0;;;;;;;:::i;37727:1733::-;;;;;;;;;;;;;;;;-1:-1:-1;37727:1733:0;;;;;;;:::i;30420:256::-;;;;;;;;;;;;;;;;-1:-1:-1;30420:256:0;;;;;;;:::i;28449:46::-;;;;;;;;;;;;;;;:::o;29536:95::-;29608:8;:15;29536:95;:::o;32871:917::-;32966:7;32986:21;33010:8;33019:4;33010:14;;;;;;;;;;;;;;;;33059;;;:8;:14;;;;;;;-1:-1:-1;;;;;33059:21:0;;;;;;;;;;;33120:34;;;33010:14;;;;;;;;33120:22;;;:34;;;;;;33197:13;;;;33187:38;;-1:-1:-1;;;33187:38:0;;;;33010:14;;-1:-1:-1;33059:21:0;;33120:34;;33010:14;;33197:13;;;33187:36;;:38;;;;33010:14;;33187:38;;;;;;33197:13;33187:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33187:38:0;33258:19;;;;33187:38;;-1:-1:-1;33240:15:0;:37;:57;;;;-1:-1:-1;33281:16:0;;;33240:57;33236:449;;;33314:19;33336:51;33350:4;:19;;;33371:15;33336:13;:51::i;:::-;33314:73;;33402:24;33429:14;33444:10;33429:26;;;;;;;;;;;;;;;;;;:42;;;33402:69;;33486:15;33504:75;33563:15;;33504:54;33542:4;:15;;;33504:33;33520:16;33504:11;:15;;:33;;;;:::i;:::-;:37;;:54::i;:::-;:58;;:75::i;:::-;33486:93;-1:-1:-1;33615:58:0;33638:34;33660:11;33638:17;33486:93;33650:4;33638:11;:17::i;:34::-;33615:18;;:22;:58::i;:::-;33594:79;;33236:449;;;;33752:27;;;;:15;;;:27;;;;;;33702:11;;:78;;33752:27;33702:45;;33742:4;;33702:35;;33718:18;33702:15;:35::i;:45::-;:49;;:78::i;:::-;33695:85;;;;;;32871:917;;;;;;:::o;27741:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27741:26:0;;;;-1:-1:-1;27741:26:0;;;;;;;:::o;28080:44::-;;;;:::o;27956:34::-;;;;:::o;30852:164::-;29121:8;;-1:-1:-1;;;;;29121:8:0;29133:10;29121:22;29113:73;;;;-1:-1:-1;;;29113:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30990:18:::1;30955:8;30964:4;30955:14;;;;;;;;;;;;;;;;;;:32;;:53;;;;30852:164:::0;;:::o;31139:398::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31262:14:::2;:21:::0;31287:2:::2;-1:-1:-1::0;31262:27:0::2;31254:75;;;;-1:-1:-1::0;;;31254:75:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31340:17;:15;:17::i;:::-;31388:140;::::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;31388:140:0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;-1:-1:-1;31388:140:0;;;;;;31368:14:::2;:161:::0;;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;;31368:161:0::2;::::0;;;::::2;;::::0;;;;;;;;;;;;;;;;;;;25198:22;31139:398::o;46240:722::-;29257:8;;46374:12;;-1:-1:-1;;;;;29257:8:0;29269:10;29257:22;29249:69;;;;-1:-1:-1;;;29249:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46399:21:::1;46443:9;46437:23;46464:1;46437:28;46433:179;;;-1:-1:-1::0;46493:4:0;46433:179:::1;;;46581:9;46565:27;;;;;;46595:4;46541:59;;;;;;-1:-1:-1::0;;;;;46541:59:0::1;;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;46541:59:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46530:70;;46433:179;46685:12;46699:23;46726:6;-1:-1:-1::0;;;;;46726:11:0::1;46746:5;46753:8;46726:36;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;46726:36:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46684:78;;;;46781:7;46773:83;;;;-1:-1:-1::0;;;46773:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46893:6;-1:-1:-1::0;;;;;46874:50:0::1;;46901:5;46908:9;46919:4;46874:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;46874:50:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46944:10:::0;46240:722;-1:-1:-1;;;;;;;46240:722:0:o;30684:160::-;29121:8;;-1:-1:-1;;;;;29121:8:0;29133:10;29121:22;29113:73;;;;-1:-1:-1;;;29113:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30819:17:::1;30785:8;30794:4;30785:14;;;;;;;;;;;;;;;;;;:31;;:51;;;;30684:160:::0;;:::o;28341:51::-;;;;;;;;;;;;;;;:::o;31545:517::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31686:33:::2;31722:14;31737:10;31722:26;;;;;;;;;;;;;;;;;;31686:62;;31781:1;31767:10;:15;;31759:44;;;::::0;;-1:-1:-1;;;31759:44:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31759:44:0;;;;;;;;;;;;;::::2;;31822:26;::::0;::::2;::::0;:31;31814:66:::2;;;::::0;;-1:-1:-1;;;31814:66:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;31814:66:0;;;;;;;;;;;;;::::2;;31891:17;:15;:17::i;:::-;31919:37:::0;;-1:-1:-1;;;;;;31919:37:0::2;-1:-1:-1::0;;;;;31919:37:0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;31967:26:0;;::::2;:45:::0;;;;-1:-1:-1;32023:27:0::2;::::0;;::::2;:31:::0;;;25198:22;;-1:-1:-1;31545:517:0:o;40028:2743::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;;;29405:10:::1;29385:31:::0;;:19:::1;:31;::::0;;;;;::::1;;29380:129;;29442:30;29461:10;29442:18;:30::i;:::-;29441:31;29433:64;;;::::0;;-1:-1:-1;;;29433:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;;::::1;;40130:15:::2;::::0;;;:9:::2;:15;::::0;;;;;::::2;;40129:16;40121:35;;;::::0;;-1:-1:-1;;;40121:35:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40121:35:0;;;;;;;;;;;;;::::2;;40167:16;40178:4;40167:10;:16::i;:::-;40196:21;40220:8;40229:4;40220:14;;;;;;;;;::::0;;;::::2;::::0;;;40269;;;:8:::2;:14:::0;;;;;;40284:10:::2;40269:26:::0;;;;;;;;40344:8:::2;:14:::0;;40220::::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;40269:26:0;40220:14;40278:4;;40344:14;::::2;;;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1::0;;;;;40344:23:0::2;-1:-1:-1::0;;;;;40334:50:0::2;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;40334:52:0;40429:8:::2;:14:::0;;40334:52;;-1:-1:-1;40397:19:0::2;::::0;40438:4;;40429:14;::::2;;;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1::0;;;;;40429:23:0::2;-1:-1:-1::0;;;;;40419:46:0::2;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;40419:48:0;40498:13:::2;::::0;::::2;::::0;40532:11;;40419:48;;-1:-1:-1;;;;;;40498:13:0::2;::::0;40524:56:::2;;;::::0;;-1:-1:-1;;;40524:56:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40613:1;40599:11;:15;40591:56;;;::::0;;-1:-1:-1;;;40591:56:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40660:16;40671:4;40660:10;:16::i;:::-;40739:11:::0;;40722:14:::2;::::0;40739:49:::2;::::0;40776:11;;40739:32:::2;::::0;40755:15;40739::::2;:32::i;:49::-;40722:66;;40814:6;40803:8;:17;40799:67;;;40848:6;40837:17;;40799:67;40880:12:::0;;40876:1573:::2;;40909:21;40964:25:::0;41002:9:::2;-1:-1:-1::0;;;;;40992:34:0::2;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;40992:36:0;41074:35:::2;::::0;;-1:-1:-1;;;41074:35:0;;;;40992:36;;-1:-1:-1;41047:24:0::2;::::0;-1:-1:-1;;;;;41074:33:0;::::2;::::0;::::2;::::0;:35:::2;::::0;;::::2;::::0;40992:36:::2;::::0;41074:35;;;;;;;:33;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;41074:35:0;41144:51:::2;::::0;;-1:-1:-1;;;41144:51:0;;41174:10:::2;41144:51;::::0;::::2;::::0;;;;;;;;;41074:35;;-1:-1:-1;;;;;;41144:29:0;::::2;::::0;::::2;::::0;:51;;;;;41074:35:::2;::::0;41144:51;;;;;;;;-1:-1:-1;41144:29:0;:51;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;41144:51:0;;-1:-1:-1;41214:92:0::2;41249:9:::0;41260:8;41270:17;41289:16;41214:34:::2;:92::i;:::-;-1:-1:-1::0;;41358:11:0;;41342:27;::::2;41338:168;;;41404:1;41390:15:::0;;41338:168:::2;;;41460:11:::0;;:30:::2;::::0;41476:13;41460:15:::2;:30::i;:::-;41446:44:::0;;41338:168:::2;41547:9:::0;;41540:42:::2;::::0;;-1:-1:-1;;;41540:42:0;;41576:4:::2;41540:42;::::0;::::2;::::0;;;41522:15:::2;::::0;-1:-1:-1;;;;;41547:9:0::2;::::0;41540:27:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;41547:9;41540:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;41540:42:0;;-1:-1:-1;41601:18:0;;::::2;41597:77;;;41651:7;41640:18;;41597:77;41694:12:::0;;41690:748:::2;;41747:10;41735:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;::::0;:81:::2;;;41781:35;41799:4;41805:10;41781:17;:35::i;:::-;41762:15;:54;;41735:81;41727:112;;;::::0;;-1:-1:-1;;;41727:112:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;41727:112:0;;;;;;;;;;;;;::::2;;41881:38;41902:4;41908:10;41881:20;:38::i;:::-;41862:15;:57;41858:493;;41944:9:::0;;:53:::2;::::0;-1:-1:-1;;;;;41944:9:0::2;41975:10;41988:8:::0;41944:22:::2;:53::i;:::-;41858:493;;;42046:11;42060:56;42110:5;42060:45;42073:8;42082:4;42073:14;;;;;;;;;;;;;;;;;;:31;;;42060:8;:12;;:45;;;;:::i;:56::-;42046:70:::0;-1:-1:-1;42139:26:0::2;42168:17;:8:::0;42046:70;42168:12:::2;:17::i;:::-;42231:8;::::0;42208:9;;42139:46;;-1:-1:-1;42208:37:0::2;::::0;-1:-1:-1;;;;;42208:9:0;;::::2;::::0;42231:8:::2;42241:3:::0;42208:22:::2;:37::i;:::-;42268:9:::0;;:63:::2;::::0;-1:-1:-1;;;;;42268:9:0::2;42299:10;42312:18:::0;42268:22:::2;:63::i;:::-;41858:493;;;42390:18;::::0;::::2;::::0;:32:::2;::::0;42413:8;42390:22:::2;:32::i;:::-;42369:18;::::0;::::2;:53:::0;41690:748:::2;40876:1573;;;42487:14;:21:::0;42459:25:::2;42519:193;42561:17;42548:10;:30;42519:193;;;42655:34;::::0;;;:22:::2;::::0;::::2;:34;::::0;;;;;42639:11;;:61:::2;::::0;42695:4:::2;::::0;42639:51:::2;::::0;:15:::2;:51::i;:61::-;42609:27;::::0;;;:15:::2;::::0;;::::2;:27;::::0;;;;;:91;;;;42580:12:::2;42519:193;;;-1:-1:-1::0;42727:36:0::2;::::0;;;;;;;42748:4;;42736:10:::2;::::0;42727:36:::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;24236:1:0;25198:7;:22;-1:-1:-1;;;;;;;40028:2743:0:o;31024:107::-;31102:14;:21;31024:107;:::o;34692:1127::-;34744:21;34768:8;34777:4;34768:14;;;;;;;;;;;;;;;;;;;;;34805:9;;34768:14;;-1:-1:-1;;;;;;34805:9:0;34793:71;;34846:7;;;34793:71;34897:4;:19;;;34878:15;:38;34874:77;;34933:7;;;34874:77;34961:19;34993:4;:13;;;;;;;;;;-1:-1:-1;;;;;34993:13:0;-1:-1:-1;;;;;34983:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34983:38:0;;-1:-1:-1;35036:16:0;35032:107;;-1:-1:-1;35091:15:0;35069:19;;;;:37;35121:7;;35032:107;35149:18;35170:51;35184:4;:19;;;35205:15;35170:13;:51::i;:::-;35149:72;;35250:1;35236:10;:15;35232:54;;35268:7;;;;;35232:54;35324:14;:21;35296:25;35356:456;35398:17;35385:10;:30;35356:456;;;35446:24;35473:14;35488:10;35473:26;;;;;;;;;;;;;;;;;;:42;;;35446:69;;35530:15;35548:74;35606:15;;35548:53;35585:4;:15;;;35548:32;35563:16;35548:10;:14;;:32;;;;:::i;:74::-;35530:92;-1:-1:-1;35674:74:0;35713:34;35735:11;35713:17;35530:92;35725:4;35713:11;:17::i;:34::-;35674;;;;:22;;;:34;;;;;;;:38;:74::i;:::-;35637:34;;;;:22;;;:34;;;;;:111;-1:-1:-1;;35785:15:0;35763:19;;;:37;35417:12;;35356:456;;;;34692:1127;;;;;;:::o;42953:1599::-;29405:10;29385:31;;;;:19;:31;;;;;;;;29380:129;;29442:30;29461:10;29442:18;:30::i;:::-;29441:31;29433:64;;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;;;;24280:1:::1;24886:7;;:19;;24878:63;;;::::0;;-1:-1:-1;;;24878:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;::::1;;24280:1;25019:7;:18:::0;;;43046:15;;;:9:::2;:15;::::0;;;;;::::2;;43045:16;43037:35;;;::::0;;-1:-1:-1;;;43037:35:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;43037:35:0;;;;;;;;;;;;;::::2;;43085:21;43109:8;43118:4;43109:14;;;;;;;;;::::0;;;::::2;::::0;;;43158;;;:8:::2;:14:::0;;;;;;43173:10:::2;43158:26:::0;;;;;;;;43233:8:::2;:14:::0;;43109::::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;43158:26:0;43109:14;43167:4;;43233:14;::::2;;;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1::0;;;;;43233:23:0::2;-1:-1:-1::0;;;;;43223:50:0::2;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43223:52:0;43318:8:::2;:14:::0;;43223:52;;-1:-1:-1;43286:19:0::2;::::0;43327:4;;43318:14;::::2;;;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1::0;;;;;43318:23:0::2;-1:-1:-1::0;;;;;43308:46:0::2;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43308:48:0;43384:11;;43308:48;;-1:-1:-1;43367:14:0::2;::::0;43384:49:::2;::::0;43308:48;;43384:32:::2;::::0;43400:15;43384::::2;:32::i;:49::-;43367:66;;43456:8;43465:4;43456:14;;;;;;;;;::::0;;;::::2;::::0;;;:23:::2;:14;::::0;;::::2;;:23:::0;::::2;::::0;43446:63:::2;::::0;;-1:-1:-1;;;43446:63:0;;43490:10:::2;43446:63:::0;;::::2;::::0;;;;;;;;;;;-1:-1:-1;;;;;43456:23:0;;::::2;::::0;43446:43:::2;::::0;:63;;;;;43456:14;43446:63;;;;;;;;;43456:23;43446:63;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;43524:10:0;;43520:735:::2;;43571:10;43559:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;::::0;:81:::2;;;43605:35;43623:4;43629:10;43605:17;:35::i;:::-;43586:15;:54;;43559:81;43551:112;;;::::0;;-1:-1:-1;;;43551:112:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;43551:112:0;;;;;;;;;;;;;::::2;;43701:38;43722:4;43728:10;43701:20;:38::i;:::-;43682:15;:57;43678:500;;43760:9:::0;;:51:::2;::::0;-1:-1:-1;;;;;43760:9:0::2;43791:10;43804:6:::0;43760:22:::2;:51::i;:::-;43678:500;;;43871:1;43837:8;43846:4;43837:14;;;;;;;;;;;;;;;;;;:31;;;:35;43833:345;;;43893:11;43907:54;43955:5;43907:43;43918:8;43927:4;43918:14;;;;;;;;;;;;;;;;;;:31;;;43907:6;:10;;:43;;;;:::i;:54::-;43893:68:::0;-1:-1:-1;43980:26:0::2;44009:15;:6:::0;43893:68;44009:10:::2;:15::i;:::-;44066:8;::::0;44043:9;;43980:44;;-1:-1:-1;44043:37:0::2;::::0;-1:-1:-1;;;;;44043:9:0;;::::2;::::0;44066:8:::2;44076:3:::0;44043:22:::2;:37::i;:::-;44099:9:::0;;:63:::2;::::0;-1:-1:-1;;;;;44099:9:0::2;44130:10;44143:18:::0;44099:22:::2;:63::i;:::-;43833:345;;;44213:18;::::0;::::2;::::0;:30:::2;::::0;44236:6;44213:22:::2;:30::i;:::-;44192:18;::::0;::::2;:51:::0;43520:735:::2;44272:43;::::0;;;;;;;44302:4;;44290:10:::2;::::0;44272:43:::2;::::0;;;;::::2;::::0;;::::2;44340:1;44326:15:::0;;;44380:14:::2;:21:::0;;44412:133:::2;44454:17;44441:10;:30;44412:133;;;44532:1;44502:27:::0;;;:15:::2;::::0;;::::2;:27;::::0;;;;:31;;;;44473:12:::2;44412:133;;;-1:-1:-1::0;;24236:1:0::1;25198:7;:22:::0;-1:-1:-1;;;;;;42953:1599:0:o;26530:23::-;;;-1:-1:-1;;;;;26530:23:0;;:::o;28502:41::-;;;;;;;;;;;;;;;:::o;29639:683::-;29121:8;;-1:-1:-1;;;;;29121:8:0;29133:10;29121:22;29113:73;;;;-1:-1:-1;;;29113:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29819:11:::1;29815:61;;;29847:17;:15;:17::i;:::-;29886:23;29930:9;;29912:15;:27;:57;;29960:9;;29912:57;;;29942:15;29912:57;29998:15;::::0;29886:83;;-1:-1:-1;29998:32:0::1;::::0;30018:11;29998:19:::1;:32::i;:::-;29980:15;:50:::0;30069:244:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;30069:244:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;30041:8:::1;:273:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;30041:273:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;30041:273:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;30041:273:0;;;;;;29639:683::o;34436:180::-;34498:8;:15;34481:14;34524:85;34552:6;34546:3;:12;34524:85;;;34582:15;34593:3;34582:10;:15::i;:::-;34560:5;;34524:85;;;;34436:180;:::o;45909:158::-;29257:8;;-1:-1:-1;;;;;29257:8:0;29269:10;29257:22;29249:69;;;;-1:-1:-1;;;29249:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46018:41:::1;-1:-1:-1::0;;;;;46018:27:0;::::1;46046:3:::0;46051:7;46018:27:::1;:41::i;:::-;45909:158:::0;;;:::o;27911:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27911:38:0;;;;-1:-1:-1;27911:38:0;:::o;27708:24::-;;;;:::o;33857:496::-;33935:7;33955:21;33979:8;33988:4;33979:14;;;;;;;;;;;;;;;;34028;;;:8;:14;;;;;;;-1:-1:-1;;;;;34028:21:0;;;;;;;;;;;33979:14;;;;;;;34094:13;;;;34084:38;;-1:-1:-1;;;34084:38:0;;;;33979:14;;-1:-1:-1;34028:21:0;;33979:14;34094:13;;;;34084:36;;:38;;;;33979:14;;34084:38;;;;;;;;34094:13;34084:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34084:38:0;34169:8;:14;;34084:38;;-1:-1:-1;34133:23:0;;34178:4;;34169:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1;;;;;34169:23:0;-1:-1:-1;;;;;34159:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34159:52:0;;-1:-1:-1;34226:16:0;34222:57;;34266:1;34259:8;;;;;;;;34222:57;34296:11;;:49;;34333:11;;34296:32;;34312:15;34296;:32::i;:49::-;34289:56;;;;;;33857:496;;;;;:::o;32685:121::-;32757:7;32784:14;:3;32792:5;32784:7;:14::i;45016:151::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;45123:21:0;;;::::2;;::::0;;;:11:::2;:21;::::0;;;;:36;;-1:-1:-1;;45123:36:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;-1:-1:-1;25198:22:0;;45016:151::o;27796:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42779:103::-;29405:10;29385:31;;;;:19;:31;;;;;;;;29380:129;;29442:30;29461:10;29442:18;:30::i;:::-;29441:31;29433:64;;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;;;;42847:27:::1;42856:4;-1:-1:-1::0;;42847:8:0::1;:27::i;32355:254::-:0;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32495:6:::2;32471:20;:30;;32463:85;;;;-1:-1:-1::0;;;32463:85:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32559:19;:42:::0;24236:1;25198:7;:22;32355:254::o;39468:242::-;-1:-1:-1;;;;;39576:21:0;;39548:7;39576:21;;;:11;:21;;;;;;;;39575:127;;39683:19;;39642:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;39642:24:0;;;;;;;;;:38;;;:60;39575:127;;;-1:-1:-1;39601:14:0;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;39601:24:0;;;;;;;;;;;:38;;;;39468:242::o;45690:211::-;45772:8;;-1:-1:-1;;;;;45772:8:0;45758:10;:22;;:76;;-1:-1:-1;45785:8:0;;-1:-1:-1;;;;;45785:8:0;:22;:48;;;;-1:-1:-1;45825:8:0;;-1:-1:-1;;;;;45825:8:0;45811:10;:22;45785:48;45750:112;;;;;-1:-1:-1;;;45750:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45873:8;:20;;-1:-1:-1;;;;;;45873:20:0;-1:-1:-1;;;;;45873:20:0;;;;;;;;;;45690:211::o;45175:156::-;29121:8;;-1:-1:-1;;;;;29121:8:0;29133:10;29121:22;29113:73;;;;-1:-1:-1;;;29113:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45278:30:0;;;::::1;;::::0;;;:19:::1;:30;::::0;;;;:45;;-1:-1:-1;;45278:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45175:156::o;45502:135::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45601:15:::2;::::0;;;:9:::2;:15;::::0;;;;:28;;-1:-1:-1;;45601:28:0::2;::::0;::::2;;::::0;;;::::2;::::0;;-1:-1:-1;25198:22:0;;45502:135::o;45339:155::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45448:20:::2;::::0;;;:14:::2;:20;::::0;;;;:38;;-1:-1:-1;;45448:38:0::2;::::0;::::2;;::::0;;;::::2;::::0;;-1:-1:-1;25198:22:0;;45339:155::o;28133:77::-;;;-1:-1:-1;;;;;28133:77:0;;:::o;39718:258::-;-1:-1:-1;;;;;39829:21:0;;39801:7;39829:21;;;:11;:21;;;;;;;;39828:140;;39936:8;39945:4;39936:14;;;;;;;;;;;;;;;;:32;:14;;;;;:32;;;;;39895:14;;;:8;:14;;;;;;-1:-1:-1;;;;;39895:24:0;;;;;;;;;:38;;;:73;39828:140;;28399:43;;;;;;;;;;;;;;;:::o;32070:277::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;29121:8:::1;::::0;-1:-1:-1;;;;;29121:8:0::1;29133:10;29121:22;29113:73;;;;-1:-1:-1::0;;;29113:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32193:17:::2;:15;:17::i;:::-;32221:33;32257:14;32272:10;32257:26;;;;;;;;;::::0;;;::::2;::::0;;32294::::2;32257;::::0;;::::2;;32294::::0;::::2;:45:::0;;;;25198:22;;;;-1:-1:-1;;32070:277:0:o;37727:1733::-;24280:1;24886:7;;:19;;24878:63;;;;;-1:-1:-1;;;24878:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24878:63:0;;;;;;;;;;;;;;;24280:1;25019:7;:18;;;29405:10:::1;29385:31:::0;;:19:::1;:31;::::0;;;;;::::1;;29380:129;;29442:30;29461:10;29442:18;:30::i;:::-;29441:31;29433:64;;;::::0;;-1:-1:-1;;;29433:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29433:64:0;;;;;;;;;;;;;::::1;;37828:15:::2;::::0;;;:9:::2;:15;::::0;;;;;::::2;;37827:16;37819:35;;;::::0;;-1:-1:-1;;;37819:35:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;37819:35:0;;;;;;;;;;;;;::::2;;37865:16;37876:4;37865:10;:16::i;:::-;37892:21;37916:8;37925:4;37916:14;;;;;;;;;::::0;;;::::2;::::0;;;37965;;;:8:::2;:14:::0;;;;;;37980:10:::2;37965:26:::0;;;;;;;38008:11;;37916:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;38008:15:0;38004:64:::2;;38040:16;38051:4;38040:10;:16::i;:::-;38082:12:::0;;38078:1061:::2;;38126:9:::0;;38170:13:::2;::::0;;::::2;::::0;38216:30:::2;::::0;;-1:-1:-1;;;38216:30:0;;38240:4:::2;38216:30:::0;;::::2;::::0;;;;;-1:-1:-1;;;;;38126:9:0;;::::2;::::0;38170:13;;::::2;::::0;-1:-1:-1;;38126:9:0;;38216:15:::2;::::0;:30;;;;;::::2;::::0;;;;;;;;38126:9;38216:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38216:30:0;;-1:-1:-1;38261:68:0::2;-1:-1:-1::0;;;;;38261:22:0;::::2;38292:10;38313:4;38320:8:::0;38261:22:::2;:68::i;:::-;38344:14;38361:5;-1:-1:-1::0;;;;;38361:15:0::2;;38385:4;38361:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;38361:30:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38361:30:0;38417:16;;::::2;::::0;-1:-1:-1;38361:30:0;-1:-1:-1;38480:48:0::2;-1:-1:-1::0;;;;;38480:27:0;::::2;38508:9:::0;38417:16;38480:27:::2;:48::i;:::-;38545:19;38598:25:::0;38636:9:::2;-1:-1:-1::0;;;;;38626:34:0::2;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38626:36:0;38708:35:::2;::::0;;-1:-1:-1;;;38708:35:0;;;;38626:36;;-1:-1:-1;38681:24:0::2;::::0;-1:-1:-1;;;;;38708:33:0;::::2;::::0;::::2;::::0;:35:::2;::::0;;::::2;::::0;38626:36:::2;::::0;38708:35;;;;;;;:33;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38708:35:0;38776:50:::2;::::0;;-1:-1:-1;;;38776:50:0;;38805:10:::2;38776:50;::::0;::::2;::::0;;;;;;;;;38708:35;;-1:-1:-1;;;;;;38776:28:0;::::2;::::0;::::2;::::0;:50;;;;;38708:35:::2;::::0;38776:50;;;;;;;;-1:-1:-1;38776:28:0;:50;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;38776:50:0;;-1:-1:-1;38845:91:0::2;38879:9:::0;38890:8;38900:17;38919:16;38845:33:::2;:91::i;:::-;-1:-1:-1::0;;38982:11:0;;:28:::2;::::0;38998:11;38982:15:::2;:28::i;:::-;38968:42:::0;;39045:17:::2;::::0;::::2;::::0;:31:::2;::::0;39067:8;39045:21:::2;:31::i;:::-;39025:17;::::0;::::2;:51:::0;-1:-1:-1;;39112:15:0::2;39091:18;::::0;::::2;:36:::0;-1:-1:-1;;;38078:1061:0::2;39177:14;:21:::0;39149:25:::2;39209:193;39251:17;39238:10;:30;39209:193;;;39345:34;::::0;;;:22:::2;::::0;::::2;:34;::::0;;;;;39329:11;;:61:::2;::::0;39385:4:::2;::::0;39329:51:::2;::::0;:15:::2;:51::i;:61::-;39299:27;::::0;;;:15:::2;::::0;;::::2;:27;::::0;;;;;:91;;;;39270:12:::2;39209:193;;;-1:-1:-1::0;39417:35:0::2;::::0;;;;;;;39437:4;;39425:10:::2;::::0;39417:35:::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;24236:1:0;25198:7;:22;-1:-1:-1;;;37727:1733:0:o;30420:256::-;29121:8;;-1:-1:-1;;;;;29121:8:0;29133:10;29121:22;29113:73;;;;-1:-1:-1;;;29113:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30509:17:::1;:15;:17::i;:::-;30555:63;30606:11;30555:46;30575:8;30584:4;30575:14;;;;;;;;;;;;;;;;;;:25;;;30555:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;30537:15;:81;;;;30657:11;30629:8;30638:4;30629:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;30420:256:::0;;:::o;7261:220::-;7319:7;7343:6;7339:20;;-1:-1:-1;7358:1:0;7351:8;;7339:20;7382:5;;;7386:1;7382;:5;:1;7406:5;;;;;:10;7398:56;;;;-1:-1:-1;;;7398:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7959:153;8017:7;8049:1;8045;:5;8037:44;;;;;-1:-1:-1;;;8037:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8103:1;8099;:5;;;;;;;7959:153;-1:-1:-1;;;7959:153:0:o;6382:179::-;6440:7;6472:5;;;6496:6;;;;6488:46;;;;;-1:-1:-1;;;6488:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6844:158;6902:7;6935:1;6930;:6;;6922:49;;;;;-1:-1:-1;;;6922:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6989:5:0;;;6844:158::o;11732:422::-;12099:20;12138:8;;;11732:422::o;35827:984::-;35881:22;35906:8;35915:4;35906:14;;;;;;;;;;;;;;;;35956;;;:8;:14;;;;;;35971:10;35956:26;;;;;;;;36021:14;:21;35906:14;;;;;;;;-1:-1:-1;35956:26:0;36053:751;36095:17;36082:10;:30;36053:751;;;36148:26;;;;:14;:26;;;;;;;;36143:650;;36195:16;36282:28;;;:16;;;:28;;;;;;;;;36231:23;;;:35;;;;;;36214:12;;:97;;36282:28;36214:63;;36272:4;;36214:53;;:12;:16;:53::i;:97::-;36195:116;-1:-1:-1;36334:12:0;;36330:448;;36371:33;36407:14;36422:10;36407:26;;;;;;;;;;;;;;;;;;;;;36479:22;;36407:26;;-1:-1:-1;;;;;;36479:22:0;36524:54;36479:22;36557:10;36569:8;36524:18;:54::i;:::-;36631:27;;;;:41;;36663:8;36631:31;:41::i;:::-;36601:27;;;:71;36700:58;;;;;;;;36737:10;;-1:-1:-1;;;;;36700:58:0;;;36711:10;;36700:58;;;;;;;;;;36330:448;;;36143:650;;36114:12;;36053:751;;;;35827:984;;;;:::o;37271:448::-;37494:9;-1:-1:-1;;;;;37484:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37484:36:0;37466:54;;37445:75;;;37437:133;;;;-1:-1:-1;;;37437:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37637:9;-1:-1:-1;;;;;37627:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37627:35:0;37609:53;;37589:73;;;37581:130;;;;-1:-1:-1;;;37581:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37271:448;;;;:::o;19554:177::-;19664:58;;;-1:-1:-1;;;;;19664:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19664:58:0;-1:-1:-1;;;19664:58:0;;;19637:86;;19657:5;;19637:19;:86::i;19739:205::-;19867:68;;;-1:-1:-1;;;;;19867:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19867:68:0;-1:-1:-1;;;19867:68:0;;;19840:96;;19860:5;;19840:19;:96::i;20843:286::-;20940:20;20963:50;21007:5;20963;-1:-1:-1;;;;;20963:15:0;;20987:4;20994:7;20963:39;;;;;;;;;;;;;-1:-1:-1;;;;;20963:39:0;;;;;;-1:-1:-1;;;;;20963:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20963:39:0;;:43;:50::i;:::-;21051:69;;;-1:-1:-1;;;;;21051:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21051:69:0;-1:-1:-1;;;21051:69:0;;;20940:73;;-1:-1:-1;21024:97:0;;21044:5;;21024:19;:97::i;36819:444::-;37039:9;-1:-1:-1;;;;;37029:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37029:36:0;36991:34;;;:74;;36983:132;;;;-1:-1:-1;;;36983:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37181:9;-1:-1:-1;;;;;37171:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37171:35:0;37134:33;;;:72;;37126:129;;;;-1:-1:-1;;;37126:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44667:341;44767:12;44789;-1:-1:-1;;;;;44782:30:0;;44821:4;44782:45;;;;;;;;;;;;;-1:-1:-1;;;;;44782:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44782:45:0;;-1:-1:-1;44842:14:0;;;44838:163;;;44880:12;-1:-1:-1;;;;;44873:29:0;;44903:3;44908:4;44873:40;;;;;;;;;;;;;-1:-1:-1;;;;;44873:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44838:163:0;;-1:-1:-1;44838:163:0;;44953:12;-1:-1:-1;;;;;44946:29:0;;44976:3;44981:7;44946:43;;;;;;;;;;;;;-1:-1:-1;;;;;44946:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21859:761;22283:23;22309:69;22337:4;22309:69;;;;;;;;;;;;;;;;;22317:5;-1:-1:-1;;;;;22309:27:0;;;:69;;;;;:::i;:::-;22393:17;;22283:95;;-1:-1:-1;22393:21:0;22389:224;;22535:10;22524:30;;;;;;;;;;;;;;;-1:-1:-1;22524:30:0;22516:85;;;;-1:-1:-1;;;22516:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14652:195;14755:12;14787:52;14809:6;14817:4;14823:1;14826:12;14787:21;:52::i;:::-;14780:59;14652:195;-1:-1:-1;;;;14652:195:0:o;15704:530::-;15831:12;15889:5;15864:21;:30;;15856:81;;;;-1:-1:-1;;;15856:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15956:18;15967:6;15956:10;:18::i;:::-;15948:60;;;;;-1:-1:-1;;;15948:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16082:12;16096:23;16123:6;-1:-1:-1;;;;;16123:11:0;16143:5;16151:4;16123:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16123:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16081:75;;;;16174:52;16192:7;16201:10;16213:12;16174:17;:52::i;:::-;16167:59;15704:530;-1:-1:-1;;;;;;;15704:530:0:o;18244:742::-;18359:12;18388:7;18384:595;;;-1:-1:-1;18419:10:0;18412:17;;18384:595;18533:17;;:21;18529:439;;18796:10;18790:17;18857:15;18844:10;18840:2;18836:19;18829:44;18744:148;18939:12;18932:20;;-1:-1:-1;;;18932:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://8b2313ab73db44b3eec350afd1c4f5e888b8fbb9d7eb441810f20449fb7f964d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.