ERC-20
Overview
Max Total Supply
39,755.934632515047927478 ERC20 ***
Holders
2,328
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
12.509380162012293612 ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ConvergentCurvePool
Compiler Version
v0.7.1+commit.f4a555be
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Apache-2.0pragma solidity ^0.7.0;pragma experimental ABIEncoderV2;import "./interfaces/IERC20Decimals.sol";import "./balancer-core-v2/lib/math/LogExpMath.sol";import "./balancer-core-v2/lib/math/FixedPoint.sol";import "./balancer-core-v2/vault/interfaces/IMinimalSwapInfoPool.sol";import "./balancer-core-v2/vault/interfaces/IVault.sol";import "./balancer-core-v2/pools/BalancerPoolToken.sol";contract ConvergentCurvePool is IMinimalSwapInfoPool, BalancerPoolToken {using LogExpMath for uint256;using FixedPoint for uint256;// The token we expect to stay constant in valueIERC20 public immutable underlying;uint8 public immutable underlyingDecimals;// The token we expect to appreciate to match underlyingIERC20 public immutable bond;uint8 public immutable bondDecimals;// The expiration timeuint256 public immutable expiration;// The number of seconds in our timescaleuint256 public immutable unitSeconds;// The Balancer pool data
123456789// SPDX-License-Identifier: Apache-2.0pragma solidity >=0.7.0;import "../balancer-core-v2/lib/openzeppelin/ERC20.sol";interface IERC20Decimals is IERC20 {// Non standard but almost all erc20 have thisfunction decimals() external view returns (uint8);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated// documentation files (the “Software”), to deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to// permit persons to whom the Software is furnished to do so, subject to the following conditions:// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the// Software.// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.pragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";/* solhint-disable *//*** @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).** Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural* exponentiation and logarithm (where the base is Euler's number).*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;import "./LogExpMath.sol";import "../helpers/BalancerErrors.sol";/* solhint-disable private-vars-leading-underscore */library FixedPoint {uint256 internal constant ONE = 1e18; // 18 decimal placesuint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)// Minimum base for the power function when the exponent is 'free' (larger than ONE).
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;pragma experimental ABIEncoderV2;import "./IBasePool.sol";/*** @dev Pool contracts with the MinimalSwapInfo or TwoToken specialization settings should implement this interface.** This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool.* Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will grant* to the pool in a 'given out' swap.*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma experimental ABIEncoderV2;import "../../lib/openzeppelin/IERC20.sol";import "./IWETH.sol";import "./IAsset.sol";import "./IAuthorizer.sol";import "./IFlashLoanRecipient.sol";import "../ProtocolFeesCollector.sol";import "../../lib/helpers/ISignaturesValidator.sol";import "../../lib/helpers/ITemporarilyPausable.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;import "../lib/math/Math.sol";import "../lib/openzeppelin/IERC20.sol";import "../lib/openzeppelin/IERC20Permit.sol";import "../lib/openzeppelin/EIP712.sol";/*** @title Highly opinionated token implementation* @author Balancer Labs* @dev* - Includes functions to increase and decrease allowance as a workaround
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";import "./IERC20.sol";import "./SafeMath.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.* For a generic mechanism see {ERC20PresetMinterPauser}.** TIP: For a detailed writeup see our guide* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** We have followed general OpenZeppelin guidelines: functions revert instead* of returning `false` on failure. This behavior is nonetheless conventional* and does not conflict with the expectations of ERC20 applications.** Additionally, an {Approval} event is emitted on calls to {transferFrom}.* This allows applications to reconstruct the allowance for all accounts just
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;// solhint-disable/*** @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are* supported.*/function _require(bool condition, uint256 errorCode) pure {if (!condition) _revert(errorCode);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Returns the amount of tokens in existence.*/function totalSupply() external view returns (uint256);/*** @dev Returns the amount of tokens owned by `account`.*/function balanceOf(address account) external view returns (uint256);/*** @dev Moves `amount` tokens from the caller's account to `recipient`.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transfer(address recipient, uint256 amount) external returns (bool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";/*** @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, reverting on* overflow.** Counterpart to Solidity's `+` operator.*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;pragma experimental ABIEncoderV2;import "./IVault.sol";import "./IPoolSwapStructs.sol";/*** @dev Interface for adding and removing liquidity that all Pool contracts should implement. Note that this is not* the complete Pool contract interface, as it is missing the swap hooks. Pool contracts should also inherit from* either IGeneralPool or IMinimalSwapInfoPool*/interface IBasePool is IPoolSwapStructs {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;pragma experimental ABIEncoderV2;import "../../lib/openzeppelin/IERC20.sol";import "./IVault.sol";interface IPoolSwapStructs {// This is not really an interface - it just defines common structs used by other interfaces: IGeneralPool and// IMinimalSwapInfoPool.//// This data structure represents a request for a token swap, where `kind` indicates the swap type ('given in' or
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;import "../../lib/openzeppelin/IERC20.sol";/*** @dev Interface for the WETH token contract used internally for wrapping and unwrapping, to support* sending and receiving ETH in joins, swaps, and internal balance deposits and withdrawals.*/interface IWETH is IERC20 {function deposit() external payable;function withdraw(uint256 amount) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;/*** @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero* address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like* types.** This concept is unrelated to a Pool's Asset Managers.*/interface IAsset {// solhint-disable-previous-line no-empty-blocks}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;interface IAuthorizer {/*** @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`.*/function canPerform(bytes32 actionId,address account,address where) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;// Inspired by Aave Protocol's IFlashLoanReceiver.import "../../lib/openzeppelin/IERC20.sol";interface IFlashLoanRecipient {/*** @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.** At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this* call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;pragma experimental ABIEncoderV2;import "../lib/openzeppelin/IERC20.sol";import "../lib/helpers/InputHelpers.sol";import "../lib/helpers/Authentication.sol";import "../lib/openzeppelin/ReentrancyGuard.sol";import "../lib/openzeppelin/SafeERC20.sol";import "./interfaces/IVault.sol";import "./interfaces/IAuthorizer.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;/*** @dev Interface for the SignatureValidator helper, used to support meta-transactions.*/interface ISignaturesValidator {/*** @dev Returns the EIP712 domain separator.*/function getDomainSeparator() external view returns (bytes32);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;/*** @dev Interface for the TemporarilyPausable helper.*/interface ITemporarilyPausable {/*** @dev Emitted every time the pause state changes by `_setPaused`.*/event PausedStateChanged(bool paused);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;import "../openzeppelin/IERC20.sol";import "./BalancerErrors.sol";import "../../vault/interfaces/IAsset.sol";library InputHelpers {function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {_require(a == b, Errors.INPUT_LENGTH_MISMATCH);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;import "./BalancerErrors.sol";import "./IAuthentication.sol";/*** @dev Building block for performing access control on external functions.** This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied* to external functions to only make them callable by authorized accounts.** Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Based on the ReentrancyGuard library from OpenZeppelin Contracts, altered to reduce bytecode size.// Modifier code is inlined by the compiler, which causes its code to appear multiple times in the codebase. By using// private functions, we achieve the same end result with slightly higher runtime gas costs, but reduced bytecode size.pragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";/*** @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].*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Based on the ReentrancyGuard library from OpenZeppelin Contracts, altered to reduce gas costs.// The `safeTransfer` and `safeTransferFrom` functions assume that `token` is a contract (an account with code), and// work differently from the OpenZeppelin version if it is not.pragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";import "./IERC20.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {function safeTransfer(IERC20 token,address to,uint256 value
12345678910111213141516171819202122// SPDX-License-Identifier: GPL-3.0-or-later// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.7.0;interface IAuthentication {/*** @dev Returns the action identifier associated with the external function described by `selector`.*/function getActionId(bytes4 selector) external view returns (bytes32);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "../helpers/BalancerErrors.sol";/*** @dev Wrappers over Solidity's arithmetic operations with added overflow checks.* Adapted from OpenZeppelin's SafeMath library*/library Math {/*** @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.*/function add(uint256 a, uint256 b) internal pure returns (uint256) {uint256 c = a + b;_require(c >= a, Errors.ADD_OVERFLOW);return c;}/*** @dev Returns the addition of two signed integers, reverting on overflow.*/function add(int256 a, int256 b) internal pure returns (int256) {int256 c = a + b;_require((b >= 0 && c >= a) || (b < 0 && c < a), Errors.ADD_OVERFLOW);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.*/interface IERC20Permit {/*** @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,* given `owner`'s signed approval.** IMPORTANT: The same issues {IERC20-approve} has related to transaction* ordering also apply here.** Emits an {Approval} event.** Requirements:** - `spender` cannot be the zero address.* - `deadline` must be a timestamp in the future.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.** The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,* thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding* they need in their contracts using a combination of `abi.encode` and `keccak256`.** This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA* ({_hashTypedDataV4}).** The implementation of the domain separator was designed to be as efficient as possible while still properly updating* the chain id to protect against replay attacks on an eventual fork of the chain.** NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].** _Available since v3.4._*/abstract contract EIP712 {/* solhint-disable var-name-mixedcase */bytes32 private immutable _HASHED_NAME;
12345678910111213141516{"optimizer": {"enabled": true,"runs": 10000},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","abi"]}},"libraries": {}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_underlying","type":"address"},{"internalType":"contract IERC20","name":"_bond","type":"address"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"uint256","name":"_unitSeconds","type":"uint256"},{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint256","name":"_percentFee","type":"uint256"},{"internalType":"uint256","name":"_percentFeeGov","type":"uint256"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"collectedBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"collectedBond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingBond","type":"uint256"}],"name":"FeeCollection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_BOUND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bond","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesBond","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesUnderlying","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"protocolSwapFee","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onExitPool","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"uint256[]","name":"dueProtocolFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"protocolSwapFee","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onJoinPool","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256[]","name":"dueProtocolFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum IVault.SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"uint256","name":"lastChangeBlock","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IPoolSwapStructs.SwapRequest","name":"swapRequest","type":"tuple"},{"internalType":"uint256","name":"currentBalanceTokenIn","type":"uint256"},{"internalType":"uint256","name":"currentBalanceTokenOut","type":"uint256"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"percentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentFeeGov","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountX","type":"uint256"},{"internalType":"uint256","name":"reserveX","type":"uint256"},{"internalType":"uint256","name":"reserveY","type":"uint256"},{"internalType":"bool","name":"out","type":"bool"}],"name":"solveTradeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unitSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6102a06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960e0523480156200003657600080fd5b506040516200430238038062004302833981016040819052620000599162000679565b6040805180820190915260018152603160f81b602080830191825284519085019081206080529151902060a0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c052825183918391620000be91600391620004ff565b508051620000d4906004906020840190620004ff565b5050508642890310620000e657600080fd5b6040516309b2760f60e01b81526000906001600160a01b038816906309b2760f9062000118906002906004016200081e565b602060405180830381600087803b1580156200013357600080fd5b505af115801562000148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016e919062000660565b6040805160028082526060808301845293945090916020830190803683370190505090508a6001600160a01b03168c6001600160a01b0316101562000211578b81600081518110620001bc57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508a81600181518110620001eb57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000270565b8a816000815181106200022057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508b816001815181106200024f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6040805160028082526060820183526001600160a01b038b16926366a9c7d29286928692602083019080368337019050506040518463ffffffff1660e01b8152600401620002c19392919062000782565b600060405180830381600087803b158015620002dc57600080fd5b505af1158015620002f1573d6000803e3d6000fd5b5050506001600160601b031960608a901b166101c052506101e0829052610220879052670429d069189e00008610620003475760405162461bcd60e51b81526004016200033e9062000833565b60405180910390fd5b6102408690526001600160601b031960608d901b16610100526040805163313ce56760e01b815290516001600160a01b038e169163313ce567916004808301926020929190829003018186803b158015620003a157600080fd5b505afa158015620003b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dc919062000758565b60f81b6001600160f81b0319166101205260608b901b6001600160601b031916610140526040805163313ce56760e01b815290516001600160a01b038d169163313ce567916004808301926020929190829003018186803b1580156200044157600080fd5b505afa15801562000456573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047c919062000758565b60f81b6001600160f81b031916610160526101808a90526101a0899052606085901b6001600160601b031916610200526001600160a01b038b8116908d161080620004c9576001620004cc565b60005b60ff166102605280620004e1576000620004e4565b60015b60ff166102805250620008659b505050505050505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200054257805160ff191683800117855562000572565b8280016001018555821562000572579182015b828111156200057257825182559160200191906001019062000555565b506200058092915062000584565b5090565b5b8082111562000580576000815560010162000585565b80516001600160a01b0381168114620005b357600080fd5b92915050565b600082601f830112620005ca578081fd5b81516001600160401b0380821115620005e1578283fd5b6040516020601f8401601f191682018101838111838210171562000603578586fd5b806040525081945083825286818588010111156200062057600080fd5b600092505b8383101562000644578583018101518284018201529182019162000625565b83831115620006565760008185840101525b5050505092915050565b60006020828403121562000672578081fd5b5051919050565b6000806000806000806000806000806101408b8d03121562000699578586fd5b620006a58c8c6200059b565b9950620006b68c60208d016200059b565b985060408b0151975060608b01519650620006d58c60808d016200059b565b955060a08b0151945060c08b01519350620006f48c60e08d016200059b565b6101008c01519093506001600160401b038082111562000712578384fd5b620007208e838f01620005b9565b93506101208d015191508082111562000737578283fd5b50620007468d828e01620005b9565b9150509295989b9194979a5092959850565b6000602082840312156200076a578081fd5b815160ff811681146200077b578182fd5b9392505050565b60006060820185835260206060818501528186518084526080860191508288019350845b81811015620007ce57620007bb855162000859565b83529383019391830191600101620007a6565b505084810360408601528551808252908201925081860190845b818110156200081057620007fd835162000859565b85529383019391830191600101620007e8565b509298975050505050505050565b60208101600383106200082d57fe5b91905290565b6020808252600c908201526b08ccaca40e8dede40d0d2ced60a31b604082015260600190565b6001600160a01b031690565b60805160a05160c05160e0516101005160601c6101205160f81c6101405160601c6101605160f81c610180516101a0516101c05160601c6101e0516102005160601c6102205161024051610260516102805161389362000a6f600039806108c9528061093a5280610f7c5280610fed52806113ab5280611407528061160252806116cd528061189352806119305280611a1052806122a1528061236352806123f7528061254552508061088852806109065280610f3b5280610fb95280611314528061137052806115985280611659528061185252806118f7528061197952806119d55280612267528061232252806123be52806125115250806105c7528061147352806114eb5280611519528061157652806115e0528061163452806116a852508061060f5280611f5d52508061063352806115495250806105a352806107865280610e395250806107245280610a625280610b105280610de05250806110885280611ad45250806105eb5280611a6e5280611a9d5250806110ac52806113de5280611a455280611d5e52806121bb5250806106575280611d205280611df75280611e465280611f14528061202b528061217b52508061055f528061134752806119ae5280611cf152806121555250806106d55280611cb35280611dbb5280611e825280612115525080610ca052508061125f5250806112a152508061128052506138936000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063d505accf116100a2578063eaee3f3b11610071578063eaee3f3b146103be578063f1cd96ba146103c6578063f46c39e7146103ce578063f7b94283146103e3576101f0565b8063d505accf14610370578063d5c096c414610385578063d73dd62314610398578063dd62ed3e146103ab576101f0565b80638d928af8116100de5780638d928af81461033a57806395d89b41146103425780639d2c110c1461034a578063a9059cbb1461035d576101f0565b806370a08231146102e057806374f3b009146102f357806379155050146103145780637ecebe0014610327576101f0565b806338fff2d0116101875780635aa6e675116101565780635aa6e675146102a857806364c9ec6f146102bd57806366188463146102c55780636f307dc3146102d8576101f0565b806338fff2d01461028857806341bd436a146102905780634665096d146102985780634c1a4115146102a0576101f0565b806325a760c2116101c357806325a760c21461025b57806329e4f36214610270578063313ce567146102785780633644e51514610280576101f0565b806306fdde03146101f5578063095ea7b31461021357806318160ddd1461023357806323b872dd14610248575b600080fd5b6101fd6103eb565b60405161020a919061362e565b60405180910390f35b610226610221366004613279565b61049f565b60405161020a919061359c565b61023b6104b6565b60405161020a91906135a7565b6102266102563660046131c4565b6104bc565b61026361055d565b60405161020a9190613810565b61023b610581565b61026361058d565b61023b610592565b61023b6105a1565b61023b6105c5565b61023b6105e9565b61023b61060d565b6102b0610631565b60405161020a919061355a565b6102b0610655565b6102266102d3366004613279565b610679565b6102b06106d3565b61023b6102ee366004613170565b6106f7565b6103066103013660046132d7565b610716565b60405161020a92919061356e565b61023b6103223660046134a6565b610994565b61023b610335366004613170565b610a45565b6102b0610a60565b6101fd610a84565b61023b6103583660046133aa565b610b03565b61022661036b366004613279565b610c5e565b61038361037e366004613204565b610c6b565b005b6103066103933660046132d7565b610dd2565b6102266103a6366004613279565b611025565b61023b6103b936600461318c565b61105b565b61023b611086565b6102636110aa565b6103d66110ce565b60405161020a91906137d8565b6103d66110fa565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104955780601f1061046a57610100808354040283529160200191610495565b820191906000526020600020905b81548152906001019060200180831161047857829003601f168201915b5050505050905090565b60006104ac338484611112565b5060015b92915050565b60025490565b6001600160a01b038316600081815260016020908152604080832033808552925282205491926104fa9114806104f25750838210155b61019761117a565b61050585858561118c565b336001600160a01b0386161480159061053e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15610550576105508533858403611112565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b670429d069189e000081565b601290565b600061059c61125b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106106b5576106b033856000611112565b6106c9565b6106c933856106c484876112f8565b611112565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152602081905260409020545b919050565b606080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008a146107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061376a565b60606107eb848601866132a4565b9050875160021480156107ff575080516002145b610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90613733565b61083e8861130e565b6108478161130e565b6000806108538a61143f565b6040805160028082526060820190925292945090925081602001602082028036833701905050935061088582896117a1565b847f0000000000000000000000000000000000000000000000000000000000000000815181106108b157fe5b60209081029190910101526108c681896117a1565b847f0000000000000000000000000000000000000000000000000000000000000000815181106108f257fe5b6020026020010181815250505050610972817f00000000000000000000000000000000000000000000000000000000000000008151811061092f57fe5b6020026020010151827f00000000000000000000000000000000000000000000000000000000000000008151811061096357fe5b60200260200101518a8c6117d7565b925061097d83611973565b61098682611973565b509850989650505050505050565b60008061099f611a69565b905060006109ad8683611b21565b905060006109bb8684611b21565b90506000856109dc576109d76109d1898b6112f8565b85611b21565b6109e8565b6109e889890185611b21565b905060006109f8848401836112f8565b9050610a1581610a10670de0b6b3a764000088611c5e565b611b21565b905086610a2b57610a2681896112f8565b610a35565b610a3588826112f8565b955050505050505b949350505050565b6001600160a01b031660009081526005602052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104955780601f1061046a57610100808354040283529160200191610495565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b6000808086516001811115610b7857fe5b1490508015610b9a57610b9386606001518760200151611caf565b9150610baf565b610bac86606001518760400151611caf565b91505b610bbd858760200151611caf565b9450610bcd848760400151611caf565b9350600080610be6878960200151888b60400151611db6565b915091508215610c2d576000610bfe85848487610994565b9050610c1185828b604001516000611f0a565b9050610c21818a60400151612111565b95505050505050610556565b6000610c3b85838587610994565b9050610c4e81868b604001516001611f0a565b9050610c21818a60200151612111565b60006104ac33848461118c565b610c798442111560d161117a565b6001600160a01b0387166000908152600560209081526040808320549051909291610cd0917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d91016135b0565b6040516020818303038152906040528051906020012090506000610cf3826121df565b9050600060018288888860405160008152602001604052604051610d1a9493929190613610565b6020604051602081039080840390855afa158015610d3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150610d9c90506001600160a01b03821615801590610d9457508b6001600160a01b0316826001600160a01b0316145b6101f861117a565b6001600160a01b038b166000908152600560205260409020600185019055610dc58b8b8b611112565b5050505050505050505050565b606080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b7f00000000000000000000000000000000000000000000000000000000000000008a14610e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061376a565b6060610e9e848601866132a4565b905087516002148015610eb2575080516002145b610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90613733565b610ef18861130e565b610efa8161130e565b600080610f068a61143f565b60408051600280825260608201909252929450909250816020016020820280368337019050509350610f3882896117a1565b847f000000000000000000000000000000000000000000000000000000000000000081518110610f6457fe5b6020908102919091010152610f7981896117a1565b847f000000000000000000000000000000000000000000000000000000000000000081518110610fa557fe5b6020026020010181815250505050610972817f000000000000000000000000000000000000000000000000000000000000000081518110610fe257fe5b6020026020010151827f00000000000000000000000000000000000000000000000000000000000000008151811061101657fe5b60200260200101518a8c612218565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ac9185906106c4908661243b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6006546fffffffffffffffffffffffffffffffff1681565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061116d9085906135a7565b60405180910390a3505050565b81611188576111888161244d565b5050565b6001600160a01b0383166000908152602081905260409020546111b48282101561019661117a565b6111cb6001600160a01b038416151561019961117a565b6001600160a01b038085166000908152602081905260408082208585039055918516815220546111fb908361243b565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061124d9086906135a7565b60405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112c86124ba565b306040516020016112dd9594939291906135e4565b60405160208183030381529060405280519060200120905090565b600061130883831115600161117a565b50900390565b61136d817f00000000000000000000000000000000000000000000000000000000000000008151811061133d57fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000060126124be565b817f00000000000000000000000000000000000000000000000000000000000000008151811061139957fe5b602002602001018181525050611404817f0000000000000000000000000000000000000000000000000000000000000000815181106113d457fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000060126124be565b817f00000000000000000000000000000000000000000000000000000000000000008151811061143057fe5b60200260200101818152505050565b60065460009081906fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004167f00000000000000000000000000000000000000000000000000000000000000006114e357600060068190556040517f9f878c349b0fc751f12168fdf539db8c1848b81c0751432f28626da5aa7024ee916114d1918591859181906137f5565b60405180910390a1909250905061179c565b600061150f837f00000000000000000000000000000000000000000000000000000000000000006117a1565b9050600061153d837f00000000000000000000000000000000000000000000000000000000000000006117a1565b9050606061156d83838a7f0000000000000000000000000000000000000000000000000000000000000000612218565b905060006115d77f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000815181106115c157fe5b6020026020010151611c5e90919063ffffffff16565b9050600061162b7f0000000000000000000000000000000000000000000000000000000000000000847f0000000000000000000000000000000000000000000000000000000000000000815181106115c157fe5b9050600061169f7f0000000000000000000000000000000000000000000000000000000000000000611699867f00000000000000000000000000000000000000000000000000000000000000008151811061168257fe5b6020026020010151896112f890919063ffffffff16565b90611c5e565b905060006116f67f0000000000000000000000000000000000000000000000000000000000000000611699877f00000000000000000000000000000000000000000000000000000000000000008151811061168257fe5b90507f9f878c349b0fc751f12168fdf539db8c1848b81c0751432f28626da5aa7024ee8484848460405161172d94939291906137f5565b60405180910390a1600680546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029383167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617909116919091179055909750955050505050505b915091565b60008282026117c58415806117be5750838583816117bb57fe5b04145b600361117a565b670de0b6b3a764000090049392505050565b60408051600280825260608083018452926020830190803683370190505090506000806118038561250b565b9150915060006118116104b6565b9050600061181f8484611c5e565b905061182b88826117a1565b8911156118ce576000611842856116998c866117a1565b905061184e878261257f565b89867f00000000000000000000000000000000000000000000000000000000000000008151811061187b57fe5b60209081029190910101526118908a83611c5e565b867f0000000000000000000000000000000000000000000000000000000000000000815181106118bc57fe5b60200260200101818152505050611967565b60006118de846116998b866117a1565b90506118ea878261257f565b6118f489836117a1565b867f00000000000000000000000000000000000000000000000000000000000000008151811061192057fe5b60200260200101818152505088867f00000000000000000000000000000000000000000000000000000000000000008151811061195957fe5b602002602001018181525050505b50505050949350505050565b6119d2817f0000000000000000000000000000000000000000000000000000000000000000815181106119a257fe5b602002602001015160127f00000000000000000000000000000000000000000000000000000000000000006124be565b817f0000000000000000000000000000000000000000000000000000000000000000815181106119fe57fe5b602002602001018181525050611404817f000000000000000000000000000000000000000000000000000000000000000081518110611a3957fe5b602002602001015160127f00000000000000000000000000000000000000000000000000000000000000006124be565b6000807f00000000000000000000000000000000000000000000000000000000000000004210611a9a576000611abe565b427f0000000000000000000000000000000000000000000000000000000000000000035b670de0b6b3a76400009081029150611af99082907f000000000000000000000000000000000000000000000000000000000000000002611c5e565b90506000611b0f670de0b6b3a7640000836112f8565b905080611b1b57600080fd5b91505090565b600081611b375750670de0b6b3a76400006104b0565b82611b44575060006104b0565b611b717f80000000000000000000000000000000000000000000000000000000000000008410600661117a565b82611b97770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328410600761117a565b826000670c7d713b49da000083138015611bb85750670f43fc2c04ee000083125b15611bef576000611bc884612612565b9050670de0b6b3a764000080820784020583670de0b6b3a764000083050201915050611bfd565b81611bf984612749565b0290505b670de0b6b3a76400009005611c4b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008212801590611c44575068070c1cc73b00c800008213155b600861117a565b611c5481612ae9565b9695505050505050565b6000611c6d821515600461117a565b82611c7a575060006104b0565b670de0b6b3a764000083810290611c9d90858381611c9457fe5b0414600561117a565b828181611ca657fe5b049150506104b0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611d1e57611d17837f000000000000000000000000000000000000000000000000000000000000000060126124be565b90506104b0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611d8457611d17837f000000000000000000000000000000000000000000000000000000000000000060126124be565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b906137a1565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316148015611e2b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611e445785611e396104b6565b850191509150611f01565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316148015611eb657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611ecf57611ec36104b6565b86018491509150611f01565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b906136d6565b94509492505050565b60008115612029577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415611fd8576000611f82611f5b86886112f8565b7f0000000000000000000000000000000000000000000000000000000000000000906117a1565b600680546fffffffffffffffffffffffffffffffff8082168401167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790559050611fd0868261243b565b915050610a3d565b6000611fe7611f5b87876112f8565b600680546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216850182160291161790559050611fd0868261243b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156120b4576000612072611f5b86886112f8565b600680546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216850182160291161790559050611fd085826112f8565b60006120c3611f5b87876112f8565b600680546fffffffffffffffffffffffffffffffff8082168401167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790559050611fd085826112f8565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561217957611d178360127f00000000000000000000000000000000000000000000000000000000000000006124be565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611d8457611d178360127f00000000000000000000000000000000000000000000000000000000000000006124be565b60006121e961125b565b826040516020016121fb929190613524565b604051602081830303815290604052805190602001209050919050565b60408051600280825260608083018452926020830190803683370190505090506000806122448561250b565b9150915060006122526104b6565b9050806122de576122638589612fb9565b87847f00000000000000000000000000000000000000000000000000000000000000008151811061229057fe5b6020026020010181815250506000847f0000000000000000000000000000000000000000000000000000000000000000815181106122ca57fe5b602002602001018181525050505050610a3d565b60006122ea8484611c5e565b905060006122f8828a6117a1565b90508981111561239e576000612312866116998d876117a1565b905061231e8882612fb9565b8a877f00000000000000000000000000000000000000000000000000000000000000008151811061234b57fe5b60209081029190910101526123608b84611c5e565b877f00000000000000000000000000000000000000000000000000000000000000008151811061238c57fe5b6020026020010181815250505061242e565b60006123ae8661169984876117a1565b90506123ba8882612fb9565b81877f0000000000000000000000000000000000000000000000000000000000000000815181106123e757fe5b60200260200101818152505089877f00000000000000000000000000000000000000000000000000000000000000008151811061242057fe5b602002602001018181525050505b5050505050949350505050565b6000828201610556848210158361117a565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b4690565b60008160ff168360ff1611156124e75781830360ff16600a0a84816124df57fe5b049350612503565b8160ff168360ff1610156125035782820360ff16600a0a840293505b509192915050565b600080827f00000000000000000000000000000000000000000000000000000000000000008151811061253a57fe5b6020026020010151837f00000000000000000000000000000000000000000000000000000000000000008151811061256e57fe5b602002602001015191509150915091565b6001600160a01b0382166000908152602081905260409020546125a78282101561019661117a565b6001600160a01b038316600090815260208190526040902082820390556002546125d190836112f8565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061116d9086906135a7565b670de0b6b3a7640000026000806ec097ce7bc90715b34b9f1000000000808401907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000008501028161265e57fe5b05905060006ec097ce7bc90715b34b9f100000000082800205905081806ec097ce7bc90715b34b9f100000000081840205915060038205016ec097ce7bc90715b34b9f100000000082840205915060058205016ec097ce7bc90715b34b9f100000000082840205915060078205016ec097ce7bc90715b34b9f100000000082840205915060098205016ec097ce7bc90715b34b9f1000000000828402059150600b8205016ec097ce7bc90715b34b9f1000000000828402059150600d8205016ec097ce7bc90715b34b9f1000000000828402059150600f826002919005919091010295945050505050565b6000670de0b6b3a76400008212156127865761277c826ec097ce7bc90715b34b9f10000000008161277657fe5b05612749565b6000039050610711565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000083126127d757770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e000000831261280f576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312612857576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a7008312612892576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126128c957693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e2831261290057690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126129355768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261296057680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d8312612995576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126129ca576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126129fe576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac8312612a32576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281612a5557fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000612b2e7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008312158015612b27575068070c1cc73b00c800008313155b600961117a565b6000821215612b6257612b4382600003612ae9565b6ec097ce7bc90715b34b9f100000000081612b5a57fe5b059050610711565b60006806f05b59d3b20000008312612bb857507ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000090910190770195e54c5dd42177f53a27172fa9ec630262827000000000612c04565b6803782dace9d90000008312612c0057507ffffffffffffffffffffffffffffffffffffffffffffffffc87d2531627000000909101906b1425982cf597cd205cef7380612c04565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412612c6a577fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000009093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412612cbc577fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000009093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412612d0c577fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000009093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412612d5c577fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000009093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac62000008412612dab577ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000009093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d631000008412612dfa577ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000009093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b18800008412612e49577ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800009093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c400008412612e98577ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00009093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b6001600160a01b038216600090815260208190526040902054612fdc908261243b565b6001600160a01b038316600090815260208190526040902055600254613002908261243b565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130439085906135a7565b60405180910390a35050565b80356104b081613845565b600082601f83011261306a578081fd5b813567ffffffffffffffff811115613080578182fd5b602080820261309082820161381e565b838152935081840185830182870184018810156130ac57600080fd5b600092505b848310156130cf5780358252600192909201919083019083016130b1565b505050505092915050565b600082601f8301126130ea578081fd5b813567ffffffffffffffff811115613100578182fd5b61313160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161381e565b915080825283602082850101111561314857600080fd5b8060208401602084013760009082016020015292915050565b8035600281106104b057600080fd5b600060208284031215613181578081fd5b813561055681613845565b6000806040838503121561319e578081fd5b82356131a981613845565b915060208301356131b981613845565b809150509250929050565b6000806000606084860312156131d8578081fd5b83356131e381613845565b925060208401356131f381613845565b929592945050506040919091013590565b600080600080600080600060e0888a03121561321e578283fd5b873561322981613845565b9650602088013561323981613845565b95506040880135945060608801359350608088013560ff8116811461325c578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561328b578182fd5b823561329681613845565b946020939093013593505050565b6000602082840312156132b5578081fd5b813567ffffffffffffffff8111156132cb578182fd5b610a3d8482850161305a565b60008060008060008060008060e0898b0312156132f2578081fd5b88359750602089013561330481613845565b9650604089013561331481613845565b9550606089013567ffffffffffffffff80821115613330578283fd5b61333c8c838d0161305a565b965060808b0135955060a08b0135945060c08b013591508082111561335f578283fd5b818b0191508b601f830112613372578283fd5b813581811115613380578384fd5b8c6020828501011115613391578384fd5b6020830194508093505050509295985092959890939650565b6000806000606084860312156133be578283fd5b833567ffffffffffffffff808211156133d5578485fd5b81860191506101208083890312156133eb578586fd5b6133f48161381e565b90506134008884613161565b815261340f886020850161304f565b6020820152613421886040850161304f565b6040820152606083013560608201526080830135608082015260a083013560a08201526134518860c0850161304f565b60c08201526134638860e0850161304f565b60e0820152610100808401358381111561347b578788fd5b6134878a8287016130da565b9183019190915250976020870135975060409096013595945050505050565b600080600080608085870312156134bb578182fd5b843593506020850135925060408501359150606085013580151581146134df578182fd5b939692955090935050565b6000815180845260208085019450808401835b83811015613519578151875295820195908201906001016134fd565b509495945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b60006040825261358160408301856134ea565b828103602084015261359381856134ea565b95945050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561365a5785810183015185820160400152820161363e565b8181111561366b5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526010908201527f4e6f6e205661756c742063616c6c657200000000000000000000000000000000604082015260600190565b60208082526022908201527f546f6b656e207265717565737420646f65736e2774206d617463682073746f7260408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252600e908201527f496e76616c696420666f726d6174000000000000000000000000000000000000604082015260600190565b6020808252600d908201527f57726f6e6720706f6f6c20696400000000000000000000000000000000000000604082015260600190565b6020808252601a908201527f43616c6c65642077697468206e6f6e20706f6f6c20746f6b656e000000000000604082015260600190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561383d57600080fd5b604052919050565b6001600160a01b038116811461385a57600080fd5b5056fea264697066735822122048dc0ac939a1088f45b3d5b39850b113811c6c1baf733420a00f3f6c9dc8984264736f6c63430007010033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000008a2228705ec979961f0e16df311debcf097a27660000000000000000000000000000000000000000000000000000000061f406cc000000000000000000000000000000000000000000000000000000002e7590ca000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c8000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000654be0b5556f8eadbc2d140505445fa32715ef2b000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000294c5020456c656d656e74205072696e636970616c20546f6b656e207976555344432d32384a414e3232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124c5065507976555344432d32384a414e32320000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063d505accf116100a2578063eaee3f3b11610071578063eaee3f3b146103be578063f1cd96ba146103c6578063f46c39e7146103ce578063f7b94283146103e3576101f0565b8063d505accf14610370578063d5c096c414610385578063d73dd62314610398578063dd62ed3e146103ab576101f0565b80638d928af8116100de5780638d928af81461033a57806395d89b41146103425780639d2c110c1461034a578063a9059cbb1461035d576101f0565b806370a08231146102e057806374f3b009146102f357806379155050146103145780637ecebe0014610327576101f0565b806338fff2d0116101875780635aa6e675116101565780635aa6e675146102a857806364c9ec6f146102bd57806366188463146102c55780636f307dc3146102d8576101f0565b806338fff2d01461028857806341bd436a146102905780634665096d146102985780634c1a4115146102a0576101f0565b806325a760c2116101c357806325a760c21461025b57806329e4f36214610270578063313ce567146102785780633644e51514610280576101f0565b806306fdde03146101f5578063095ea7b31461021357806318160ddd1461023357806323b872dd14610248575b600080fd5b6101fd6103eb565b60405161020a919061362e565b60405180910390f35b610226610221366004613279565b61049f565b60405161020a919061359c565b61023b6104b6565b60405161020a91906135a7565b6102266102563660046131c4565b6104bc565b61026361055d565b60405161020a9190613810565b61023b610581565b61026361058d565b61023b610592565b61023b6105a1565b61023b6105c5565b61023b6105e9565b61023b61060d565b6102b0610631565b60405161020a919061355a565b6102b0610655565b6102266102d3366004613279565b610679565b6102b06106d3565b61023b6102ee366004613170565b6106f7565b6103066103013660046132d7565b610716565b60405161020a92919061356e565b61023b6103223660046134a6565b610994565b61023b610335366004613170565b610a45565b6102b0610a60565b6101fd610a84565b61023b6103583660046133aa565b610b03565b61022661036b366004613279565b610c5e565b61038361037e366004613204565b610c6b565b005b6103066103933660046132d7565b610dd2565b6102266103a6366004613279565b611025565b61023b6103b936600461318c565b61105b565b61023b611086565b6102636110aa565b6103d66110ce565b60405161020a91906137d8565b6103d66110fa565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104955780601f1061046a57610100808354040283529160200191610495565b820191906000526020600020905b81548152906001019060200180831161047857829003601f168201915b5050505050905090565b60006104ac338484611112565b5060015b92915050565b60025490565b6001600160a01b038316600081815260016020908152604080832033808552925282205491926104fa9114806104f25750838210155b61019761117a565b61050585858561118c565b336001600160a01b0386161480159061053e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15610550576105508533858403611112565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000681565b670429d069189e000081565b601290565b600061059c61125b565b905090565b7f10a2f8bd81ee2898d7ed18fb8f114034a549fa5900020000000000000000009090565b7f00000000000000000000000000000000000000000000000002c68af0bb14000081565b7f0000000000000000000000000000000000000000000000000000000061f406cc81565b7f000000000000000000000000000000000000000000000000016345785d8a000081565b7f000000000000000000000000654be0b5556f8eadbc2d140505445fa32715ef2b81565b7f0000000000000000000000008a2228705ec979961f0e16df311debcf097a276681565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106106b5576106b033856000611112565b6106c9565b6106c933856106c484876112f8565b611112565b5060019392505050565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b0381166000908152602081905260409020545b919050565b606080336001600160a01b037f000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c81614610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b60405180910390fd5b7f10a2f8bd81ee2898d7ed18fb8f114034a549fa590002000000000000000000908a146107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061376a565b60606107eb848601866132a4565b9050875160021480156107ff575080516002145b610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90613733565b61083e8861130e565b6108478161130e565b6000806108538a61143f565b6040805160028082526060820190925292945090925081602001602082028036833701905050935061088582896117a1565b847f0000000000000000000000000000000000000000000000000000000000000001815181106108b157fe5b60209081029190910101526108c681896117a1565b847f0000000000000000000000000000000000000000000000000000000000000000815181106108f257fe5b6020026020010181815250505050610972817f00000000000000000000000000000000000000000000000000000000000000018151811061092f57fe5b6020026020010151827f00000000000000000000000000000000000000000000000000000000000000008151811061096357fe5b60200260200101518a8c6117d7565b925061097d83611973565b61098682611973565b509850989650505050505050565b60008061099f611a69565b905060006109ad8683611b21565b905060006109bb8684611b21565b90506000856109dc576109d76109d1898b6112f8565b85611b21565b6109e8565b6109e889890185611b21565b905060006109f8848401836112f8565b9050610a1581610a10670de0b6b3a764000088611c5e565b611b21565b905086610a2b57610a2681896112f8565b610a35565b610a3588826112f8565b955050505050505b949350505050565b6001600160a01b031660009081526005602052604090205490565b7f000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c890565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104955780601f1061046a57610100808354040283529160200191610495565b6000336001600160a01b037f000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c81614610b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b6000808086516001811115610b7857fe5b1490508015610b9a57610b9386606001518760200151611caf565b9150610baf565b610bac86606001518760400151611caf565b91505b610bbd858760200151611caf565b9450610bcd848760400151611caf565b9350600080610be6878960200151888b60400151611db6565b915091508215610c2d576000610bfe85848487610994565b9050610c1185828b604001516000611f0a565b9050610c21818a60400151612111565b95505050505050610556565b6000610c3b85838587610994565b9050610c4e81868b604001516001611f0a565b9050610c21818a60200151612111565b60006104ac33848461118c565b610c798442111560d161117a565b6001600160a01b0387166000908152600560209081526040808320549051909291610cd0917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c9188918d91016135b0565b6040516020818303038152906040528051906020012090506000610cf3826121df565b9050600060018288888860405160008152602001604052604051610d1a9493929190613610565b6020604051602081039080840390855afa158015610d3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150610d9c90506001600160a01b03821615801590610d9457508b6001600160a01b0316826001600160a01b0316145b6101f861117a565b6001600160a01b038b166000908152600560205260409020600185019055610dc58b8b8b611112565b5050505050505050505050565b606080336001600160a01b037f000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c81614610e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061369f565b7f10a2f8bd81ee2898d7ed18fb8f114034a549fa590002000000000000000000908a14610e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b9061376a565b6060610e9e848601866132a4565b905087516002148015610eb2575080516002145b610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b90613733565b610ef18861130e565b610efa8161130e565b600080610f068a61143f565b60408051600280825260608201909252929450909250816020016020820280368337019050509350610f3882896117a1565b847f000000000000000000000000000000000000000000000000000000000000000181518110610f6457fe5b6020908102919091010152610f7981896117a1565b847f000000000000000000000000000000000000000000000000000000000000000081518110610fa557fe5b6020026020010181815250505050610972817f000000000000000000000000000000000000000000000000000000000000000181518110610fe257fe5b6020026020010151827f00000000000000000000000000000000000000000000000000000000000000008151811061101657fe5b60200260200101518a8c612218565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ac9185906106c4908661243b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000002e7590ca81565b7f000000000000000000000000000000000000000000000000000000000000000681565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6006546fffffffffffffffffffffffffffffffff1681565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061116d9085906135a7565b60405180910390a3505050565b81611188576111888161244d565b5050565b6001600160a01b0383166000908152602081905260409020546111b48282101561019661117a565b6111cb6001600160a01b038416151561019961117a565b6001600160a01b038085166000908152602081905260408082208585039055918516815220546111fb908361243b565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061124d9086906135a7565b60405180910390a350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f91fc83e7df8c5f5afef23dd0be1b1a6a15715a2c0ddfb33b0602bee3b1885fb87fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66112c86124ba565b306040516020016112dd9594939291906135e4565b60405160208183030381529060405280519060200120905090565b600061130883831115600161117a565b50900390565b61136d817f00000000000000000000000000000000000000000000000000000000000000018151811061133d57fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000660126124be565b817f00000000000000000000000000000000000000000000000000000000000000018151811061139957fe5b602002602001018181525050611404817f0000000000000000000000000000000000000000000000000000000000000000815181106113d457fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000660126124be565b817f00000000000000000000000000000000000000000000000000000000000000008151811061143057fe5b60200260200101818152505050565b60065460009081906fffffffffffffffffffffffffffffffff808216917001000000000000000000000000000000009004167f00000000000000000000000000000000000000000000000002c68af0bb1400006114e357600060068190556040517f9f878c349b0fc751f12168fdf539db8c1848b81c0751432f28626da5aa7024ee916114d1918591859181906137f5565b60405180910390a1909250905061179c565b600061150f837f00000000000000000000000000000000000000000000000002c68af0bb1400006117a1565b9050600061153d837f00000000000000000000000000000000000000000000000002c68af0bb1400006117a1565b9050606061156d83838a7f000000000000000000000000654be0b5556f8eadbc2d140505445fa32715ef2b612218565b905060006115d77f00000000000000000000000000000000000000000000000002c68af0bb140000837f0000000000000000000000000000000000000000000000000000000000000001815181106115c157fe5b6020026020010151611c5e90919063ffffffff16565b9050600061162b7f00000000000000000000000000000000000000000000000002c68af0bb140000847f0000000000000000000000000000000000000000000000000000000000000000815181106115c157fe5b9050600061169f7f00000000000000000000000000000000000000000000000002c68af0bb140000611699867f00000000000000000000000000000000000000000000000000000000000000018151811061168257fe5b6020026020010151896112f890919063ffffffff16565b90611c5e565b905060006116f67f00000000000000000000000000000000000000000000000002c68af0bb140000611699877f00000000000000000000000000000000000000000000000000000000000000008151811061168257fe5b90507f9f878c349b0fc751f12168fdf539db8c1848b81c0751432f28626da5aa7024ee8484848460405161172d94939291906137f5565b60405180910390a1600680546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029383167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617909116919091179055909750955050505050505b915091565b60008282026117c58415806117be5750838583816117bb57fe5b04145b600361117a565b670de0b6b3a764000090049392505050565b60408051600280825260608083018452926020830190803683370190505090506000806118038561250b565b9150915060006118116104b6565b9050600061181f8484611c5e565b905061182b88826117a1565b8911156118ce576000611842856116998c866117a1565b905061184e878261257f565b89867f00000000000000000000000000000000000000000000000000000000000000018151811061187b57fe5b60209081029190910101526118908a83611c5e565b867f0000000000000000000000000000000000000000000000000000000000000000815181106118bc57fe5b60200260200101818152505050611967565b60006118de846116998b866117a1565b90506118ea878261257f565b6118f489836117a1565b867f00000000000000000000000000000000000000000000000000000000000000018151811061192057fe5b60200260200101818152505088867f00000000000000000000000000000000000000000000000000000000000000008151811061195957fe5b602002602001018181525050505b50505050949350505050565b6119d2817f0000000000000000000000000000000000000000000000000000000000000001815181106119a257fe5b602002602001015160127f00000000000000000000000000000000000000000000000000000000000000066124be565b817f0000000000000000000000000000000000000000000000000000000000000001815181106119fe57fe5b602002602001018181525050611404817f000000000000000000000000000000000000000000000000000000000000000081518110611a3957fe5b602002602001015160127f00000000000000000000000000000000000000000000000000000000000000066124be565b6000807f0000000000000000000000000000000000000000000000000000000061f406cc4210611a9a576000611abe565b427f0000000000000000000000000000000000000000000000000000000061f406cc035b670de0b6b3a76400009081029150611af99082907f000000000000000000000000000000000000000000000000000000002e7590ca02611c5e565b90506000611b0f670de0b6b3a7640000836112f8565b905080611b1b57600080fd5b91505090565b600081611b375750670de0b6b3a76400006104b0565b82611b44575060006104b0565b611b717f80000000000000000000000000000000000000000000000000000000000000008410600661117a565b82611b97770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328410600761117a565b826000670c7d713b49da000083138015611bb85750670f43fc2c04ee000083125b15611bef576000611bc884612612565b9050670de0b6b3a764000080820784020583670de0b6b3a764000083050201915050611bfd565b81611bf984612749565b0290505b670de0b6b3a76400009005611c4b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008212801590611c44575068070c1cc73b00c800008213155b600861117a565b611c5481612ae9565b9695505050505050565b6000611c6d821515600461117a565b82611c7a575060006104b0565b670de0b6b3a764000083810290611c9d90858381611c9457fe5b0414600561117a565b828181611ca657fe5b049150506104b0565b60007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b03161415611d1e57611d17837f000000000000000000000000000000000000000000000000000000000000000660126124be565b90506104b0565b7f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316826001600160a01b03161415611d8457611d17837f000000000000000000000000000000000000000000000000000000000000000660126124be565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b906137a1565b6000807f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316856001600160a01b0316148015611e2b57507f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316836001600160a01b0316145b15611e445785611e396104b6565b850191509150611f01565b7f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316856001600160a01b0316148015611eb657507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316836001600160a01b0316145b15611ecf57611ec36104b6565b86018491509150611f01565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077b906136d6565b94509492505050565b60008115612029577f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316836001600160a01b03161415611fd8576000611f82611f5b86886112f8565b7f000000000000000000000000000000000000000000000000016345785d8a0000906117a1565b600680546fffffffffffffffffffffffffffffffff8082168401167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790559050611fd0868261243b565b915050610a3d565b6000611fe7611f5b87876112f8565b600680546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216850182160291161790559050611fd0868261243b565b7f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316836001600160a01b031614156120b4576000612072611f5b86886112f8565b600680546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216850182160291161790559050611fd085826112f8565b60006120c3611f5b87876112f8565b600680546fffffffffffffffffffffffffffffffff8082168401167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790559050611fd085826112f8565b60007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b0316141561217957611d178360127f00000000000000000000000000000000000000000000000000000000000000066124be565b7f0000000000000000000000008a2228705ec979961f0e16df311debcf097a27666001600160a01b0316826001600160a01b03161415611d8457611d178360127f00000000000000000000000000000000000000000000000000000000000000066124be565b60006121e961125b565b826040516020016121fb929190613524565b604051602081830303815290604052805190602001209050919050565b60408051600280825260608083018452926020830190803683370190505090506000806122448561250b565b9150915060006122526104b6565b9050806122de576122638589612fb9565b87847f00000000000000000000000000000000000000000000000000000000000000018151811061229057fe5b6020026020010181815250506000847f0000000000000000000000000000000000000000000000000000000000000000815181106122ca57fe5b602002602001018181525050505050610a3d565b60006122ea8484611c5e565b905060006122f8828a6117a1565b90508981111561239e576000612312866116998d876117a1565b905061231e8882612fb9565b8a877f00000000000000000000000000000000000000000000000000000000000000018151811061234b57fe5b60209081029190910101526123608b84611c5e565b877f00000000000000000000000000000000000000000000000000000000000000008151811061238c57fe5b6020026020010181815250505061242e565b60006123ae8661169984876117a1565b90506123ba8882612fb9565b81877f0000000000000000000000000000000000000000000000000000000000000001815181106123e757fe5b60200260200101818152505089877f00000000000000000000000000000000000000000000000000000000000000008151811061242057fe5b602002602001018181525050505b5050505050949350505050565b6000828201610556848210158361117a565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b4690565b60008160ff168360ff1611156124e75781830360ff16600a0a84816124df57fe5b049350612503565b8160ff168360ff1610156125035782820360ff16600a0a840293505b509192915050565b600080827f00000000000000000000000000000000000000000000000000000000000000018151811061253a57fe5b6020026020010151837f00000000000000000000000000000000000000000000000000000000000000008151811061256e57fe5b602002602001015191509150915091565b6001600160a01b0382166000908152602081905260409020546125a78282101561019661117a565b6001600160a01b038316600090815260208190526040902082820390556002546125d190836112f8565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061116d9086906135a7565b670de0b6b3a7640000026000806ec097ce7bc90715b34b9f1000000000808401907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000008501028161265e57fe5b05905060006ec097ce7bc90715b34b9f100000000082800205905081806ec097ce7bc90715b34b9f100000000081840205915060038205016ec097ce7bc90715b34b9f100000000082840205915060058205016ec097ce7bc90715b34b9f100000000082840205915060078205016ec097ce7bc90715b34b9f100000000082840205915060098205016ec097ce7bc90715b34b9f1000000000828402059150600b8205016ec097ce7bc90715b34b9f1000000000828402059150600d8205016ec097ce7bc90715b34b9f1000000000828402059150600f826002919005919091010295945050505050565b6000670de0b6b3a76400008212156127865761277c826ec097ce7bc90715b34b9f10000000008161277657fe5b05612749565b6000039050610711565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000083126127d757770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e000000831261280f576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312612857576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a7008312612892576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126128c957693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e2831261290057690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126129355768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261296057680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d8312612995576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126129ca576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126129fe576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac8312612a32576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281612a5557fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000612b2e7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008312158015612b27575068070c1cc73b00c800008313155b600961117a565b6000821215612b6257612b4382600003612ae9565b6ec097ce7bc90715b34b9f100000000081612b5a57fe5b059050610711565b60006806f05b59d3b20000008312612bb857507ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000090910190770195e54c5dd42177f53a27172fa9ec630262827000000000612c04565b6803782dace9d90000008312612c0057507ffffffffffffffffffffffffffffffffffffffffffffffffc87d2531627000000909101906b1425982cf597cd205cef7380612c04565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412612c6a577fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000009093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412612cbc577fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000009093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412612d0c577fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000009093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412612d5c577fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000009093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac62000008412612dab577ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000009093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d631000008412612dfa577ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000009093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b18800008412612e49577ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800009093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c400008412612e98577ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00009093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b6001600160a01b038216600090815260208190526040902054612fdc908261243b565b6001600160a01b038316600090815260208190526040902055600254613002908261243b565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130439085906135a7565b60405180910390a35050565b80356104b081613845565b600082601f83011261306a578081fd5b813567ffffffffffffffff811115613080578182fd5b602080820261309082820161381e565b838152935081840185830182870184018810156130ac57600080fd5b600092505b848310156130cf5780358252600192909201919083019083016130b1565b505050505092915050565b600082601f8301126130ea578081fd5b813567ffffffffffffffff811115613100578182fd5b61313160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161381e565b915080825283602082850101111561314857600080fd5b8060208401602084013760009082016020015292915050565b8035600281106104b057600080fd5b600060208284031215613181578081fd5b813561055681613845565b6000806040838503121561319e578081fd5b82356131a981613845565b915060208301356131b981613845565b809150509250929050565b6000806000606084860312156131d8578081fd5b83356131e381613845565b925060208401356131f381613845565b929592945050506040919091013590565b600080600080600080600060e0888a03121561321e578283fd5b873561322981613845565b9650602088013561323981613845565b95506040880135945060608801359350608088013560ff8116811461325c578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561328b578182fd5b823561329681613845565b946020939093013593505050565b6000602082840312156132b5578081fd5b813567ffffffffffffffff8111156132cb578182fd5b610a3d8482850161305a565b60008060008060008060008060e0898b0312156132f2578081fd5b88359750602089013561330481613845565b9650604089013561331481613845565b9550606089013567ffffffffffffffff80821115613330578283fd5b61333c8c838d0161305a565b965060808b0135955060a08b0135945060c08b013591508082111561335f578283fd5b818b0191508b601f830112613372578283fd5b813581811115613380578384fd5b8c6020828501011115613391578384fd5b6020830194508093505050509295985092959890939650565b6000806000606084860312156133be578283fd5b833567ffffffffffffffff808211156133d5578485fd5b81860191506101208083890312156133eb578586fd5b6133f48161381e565b90506134008884613161565b815261340f886020850161304f565b6020820152613421886040850161304f565b6040820152606083013560608201526080830135608082015260a083013560a08201526134518860c0850161304f565b60c08201526134638860e0850161304f565b60e0820152610100808401358381111561347b578788fd5b6134878a8287016130da565b9183019190915250976020870135975060409096013595945050505050565b600080600080608085870312156134bb578182fd5b843593506020850135925060408501359150606085013580151581146134df578182fd5b939692955090935050565b6000815180845260208085019450808401835b83811015613519578151875295820195908201906001016134fd565b509495945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b60006040825261358160408301856134ea565b828103602084015261359381856134ea565b95945050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561365a5785810183015185820160400152820161363e565b8181111561366b5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526010908201527f4e6f6e205661756c742063616c6c657200000000000000000000000000000000604082015260600190565b60208082526022908201527f546f6b656e207265717565737420646f65736e2774206d617463682073746f7260408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252600e908201527f496e76616c696420666f726d6174000000000000000000000000000000000000604082015260600190565b6020808252600d908201527f57726f6e6720706f6f6c20696400000000000000000000000000000000000000604082015260600190565b6020808252601a908201527f43616c6c65642077697468206e6f6e20706f6f6c20746f6b656e000000000000604082015260600190565b6fffffffffffffffffffffffffffffffff91909116815260200190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561383d57600080fd5b604052919050565b6001600160a01b038116811461385a57600080fd5b5056fea264697066735822122048dc0ac939a1088f45b3d5b39850b113811c6c1baf733420a00f3f6c9dc8984264736f6c63430007010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000008a2228705ec979961f0e16df311debcf097a27660000000000000000000000000000000000000000000000000000000061f406cc000000000000000000000000000000000000000000000000000000002e7590ca000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c8000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000654be0b5556f8eadbc2d140505445fa32715ef2b000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000294c5020456c656d656e74205072696e636970616c20546f6b656e207976555344432d32384a414e3232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124c5065507976555344432d32384a414e32320000000000000000000000000000
-----Decoded View---------------
Arg [0] : _underlying (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _bond (address): 0x8a2228705ec979961F0e16df311dEbcf097A2766
Arg [2] : _expiration (uint256): 1643382476
Arg [3] : _unitSeconds (uint256): 779456714
Arg [4] : vault (address): 0xBA12222222228d8Ba445958a75a0704d566BF2C8
Arg [5] : _percentFee (uint256): 100000000000000000
Arg [6] : _percentFeeGov (uint256): 200000000000000000
Arg [7] : _governance (address): 0x654BE0B5556F8EadbC2D140505445fA32715eF2b
Arg [8] : name (string): LP Element Principal Token yvUSDC-28JAN22
Arg [9] : symbol (string): LPePyvUSDC-28JAN22
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000008a2228705ec979961f0e16df311debcf097a2766
Arg [2] : 0000000000000000000000000000000000000000000000000000000061f406cc
Arg [3] : 000000000000000000000000000000000000000000000000000000002e7590ca
Arg [4] : 000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c8
Arg [5] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [6] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [7] : 000000000000000000000000654be0b5556f8eadbc2d140505445fa32715ef2b
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [11] : 4c5020456c656d656e74205072696e636970616c20546f6b656e207976555344
Arg [12] : 432d32384a414e32320000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [14] : 4c5065507976555344432d32384a414e32320000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.