Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 692 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Renounce Ownersh... | 12651131 | 1204 days ago | IN | 0 ETH | 0.00036739 | ||||
Toggle Contract ... | 12495985 | 1229 days ago | IN | 0 ETH | 0.00180594 | ||||
Zap In Token Vau... | 12138085 | 1284 days ago | IN | 0.35 ETH | 0.02148375 | ||||
Zap In Curve Vau... | 12096541 | 1290 days ago | IN | 1.5 ETH | 0.10537926 | ||||
Zap In Curve Vau... | 12096378 | 1290 days ago | IN | 23 ETH | 0.04464703 | ||||
Zap In Curve Vau... | 12096155 | 1290 days ago | IN | 0 ETH | 0.10603613 | ||||
Zap In Curve Vau... | 12096067 | 1290 days ago | IN | 0 ETH | 0.11349066 | ||||
Zap In Curve Vau... | 12095409 | 1290 days ago | IN | 200 ETH | 0.03179656 | ||||
Zap In Curve Vau... | 12095295 | 1290 days ago | IN | 0 ETH | 0.06005113 | ||||
Zap In Curve Vau... | 12094723 | 1290 days ago | IN | 0 ETH | 0.10562928 | ||||
Zap In Curve Vau... | 12094680 | 1290 days ago | IN | 0 ETH | 0.03498975 | ||||
Zap In Token Vau... | 12094623 | 1290 days ago | IN | 6 ETH | 0.04771632 | ||||
Zap In Curve Vau... | 12094565 | 1290 days ago | IN | 0 ETH | 0.120656 | ||||
Zap In Curve Vau... | 12094469 | 1290 days ago | IN | 0 ETH | 0.0700776 | ||||
Zap In Token Vau... | 12094430 | 1290 days ago | IN | 0 ETH | 0.04534112 | ||||
Zap In Curve Vau... | 12094378 | 1290 days ago | IN | 0 ETH | 0.07685786 | ||||
Zap In Curve Vau... | 12094375 | 1290 days ago | IN | 0 ETH | 0.05996152 | ||||
Zap In Curve Vau... | 12094359 | 1290 days ago | IN | 0 ETH | 0.05589427 | ||||
Zap In Curve Vau... | 12094292 | 1290 days ago | IN | 0 ETH | 0.07202415 | ||||
Zap In Curve Vau... | 12093775 | 1291 days ago | IN | 6.7 ETH | 0.07234054 | ||||
Zap In Token Vau... | 12093271 | 1291 days ago | IN | 0.39 ETH | 0.03661734 | ||||
Zap In Curve Vau... | 12092052 | 1291 days ago | IN | 0.6 ETH | 0.06571685 | ||||
Zap In Curve Vau... | 12091782 | 1291 days ago | IN | 53.7 ETH | 0.05495227 | ||||
Zap In Curve Vau... | 12091565 | 1291 days ago | IN | 0 ETH | 0.10960714 | ||||
Zap In Token Vau... | 12091177 | 1291 days ago | IN | 0 ETH | 0.0277543 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12138085 | 1284 days ago | 0.35 ETH | ||||
12096541 | 1290 days ago | 1.5 ETH | ||||
12096378 | 1290 days ago | 23 ETH | ||||
12095409 | 1290 days ago | 200 ETH | ||||
12094623 | 1290 days ago | 6 ETH | ||||
12093903 | 1291 days ago | 5.5 ETH | ||||
12093903 | 1291 days ago | 5.5 ETH | ||||
12093775 | 1291 days ago | 6.7 ETH | ||||
12093271 | 1291 days ago | 0.39 ETH | ||||
12092052 | 1291 days ago | 0.6 ETH | ||||
12091782 | 1291 days ago | 53.7 ETH | ||||
12090823 | 1291 days ago | 0.1 ETH | ||||
12089808 | 1291 days ago | 5.5 ETH | ||||
12088452 | 1291 days ago | 41 ETH | ||||
12088448 | 1291 days ago | 73.5 ETH | ||||
12088381 | 1291 days ago | 46.4 ETH | ||||
12088280 | 1291 days ago | 45 ETH | ||||
12088221 | 1291 days ago | 16 ETH | ||||
12086207 | 1292 days ago | 0.18 ETH | ||||
12085663 | 1292 days ago | 21.5 ETH | ||||
12085004 | 1292 days ago | 139 ETH | ||||
12084413 | 1292 days ago | 15 ETH | ||||
12083951 | 1292 days ago | 1.3 ETH | ||||
12083907 | 1292 days ago | 20 ETH | ||||
12083074 | 1292 days ago | 20 ETH |
Loading...
Loading
Contract Name:
yVault_ZapIn_V2
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-01 */ // ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗ // ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║ // ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║ // ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║ // ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║ // ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝ // Copyright (C) 2020 zapper // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 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 Affero General Public License for more details. // ///@author Zapper ///@notice This contract adds/removes liquidity to yEarn Vaults using ETH or ERC20 Tokens. // SPDX-License-Identifier: GPLv2 // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol pragma solidity ^0.5.5; /** * @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. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @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]. */ contract ReentrancyGuard { bool private _notEntered; constructor() internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require( success, "Address: unable to send value, recipient may have reverted" ); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/GSN/Context.sol pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address payable public _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address payable msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address payable newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address payable newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: yVault_ZapInOut_General_V1_2.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add( value ); callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } interface IYVault { function deposit(uint256) external; function withdraw(uint256) external; function getPricePerFullShare() external view returns (uint256); function token() external view returns (address); // V2 function pricePerShare() external view returns (uint256); } // -- Curve -- interface ICurveRegistry { function metaPools(address tokenAddress) external view returns (address swapAddress); } interface ICurveZapIn { function ZapIn( address _fromTokenAddress, address _toTokenAddress, address _swapAddress, uint256 _incomingTokenQty, uint256 _minPoolTokens, address _swapTarget, bytes calldata _swapCallData, address affiliate ) external payable returns (uint256 crvTokensBought); } // -- Aave -- interface IAaveLendingPoolAddressesProvider { function getLendingPool() external view returns (address); function getLendingPoolCore() external view returns (address payable); } interface IAaveLendingPool { function deposit( address _reserve, uint256 _amount, uint16 _referralCode ) external payable; } interface IAToken { function redeem(uint256 _amount) external; function underlyingAssetAddress() external returns (address); } // --- interface IWETH { function deposit() external payable; function withdraw(uint256) external; } contract yVault_ZapIn_V2 is ReentrancyGuard, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; bool public stopped = false; // if true, goodwill is not deducted mapping(address => bool) public feeWhitelist; uint256 public goodwill; // % share of goodwill (0-100 %) uint256 affiliateSplit; // restrict affiliates mapping(address => bool) public affiliates; // affiliate => token => amount mapping(address => mapping(address => uint256)) public affiliateBalance; // token => amount mapping(address => uint256) public totalAffiliateBalance; address private constant ETHAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; IAaveLendingPoolAddressesProvider private constant lendingPoolAddressProvider = IAaveLendingPoolAddressesProvider( 0x24a42fD28C976A61Df5D00D0599C34c4f90748c8 ); ICurveRegistry public curveReg; ICurveZapIn public curveZapIn; event zapIn(address sender, address pool, uint256 tokensRec); constructor( ICurveRegistry _curveReg, ICurveZapIn _curveZapIn, uint256 _goodwill, uint256 _affiliateSplit ) public { curveReg = _curveReg; curveZapIn = _curveZapIn; goodwill = _goodwill; affiliateSplit = _affiliateSplit; } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } /** @notice This function adds liquidity to a Yearn vaults with ETH or ERC20 tokens @param fromToken The token used for entry (address(0) if ether) @param amountIn The amount of fromToken to invest @param toVault Yearn vault address @param isAaveUnderlying True is vault contains aave token @param minYVTokens The minimum acceptable quantity vault tokens to receive. Reverts otherwise @param _swapTarget Excecution target for the swap @param swapData DEX quote data @param affiliate Affiliate address @return tokensReceived- Quantity of Vault tokens received */ function ZapInTokenVault( address fromToken, uint256 amountIn, address toVault, bool isAaveUnderlying, uint256 minYVTokens, address _swapTarget, bytes calldata swapData, address affiliate ) external payable stopInEmergency returns (uint256 tokensReceived) { // get incoming tokens uint256 toInvest = _pullTokens(fromToken, amountIn, affiliate, true); // swap to toToken address underlyingVaultToken = IYVault(toVault).token(); uint256 toTokenAmt; if (isAaveUnderlying) { address underlyingAsset = IAToken(underlyingVaultToken) .underlyingAssetAddress(); // aTokens are 1:1 toTokenAmt = _fillQuote( fromToken, underlyingAsset, toInvest, _swapTarget, swapData ); IERC20(underlyingAsset).safeApprove( lendingPoolAddressProvider.getLendingPoolCore(), toTokenAmt ); IAaveLendingPool(lendingPoolAddressProvider.getLendingPool()) .deposit(underlyingAsset, toTokenAmt, 0); } else { toTokenAmt = _fillQuote( fromToken, underlyingVaultToken, toInvest, _swapTarget, swapData ); } // Deposit to Vault tokensReceived = _vaultDeposit( underlyingVaultToken, toTokenAmt, toVault, minYVTokens ); } /** @notice This function adds liquidity to a Yearn Curve vaults with ETH or ERC20 tokens @param fromToken The token used for entry (address(0) if ether) @param amountIn The amount of fromToken to invest @param toToken Intermediate token to swap to @param toVault Yearn vault address @param minYVTokens The minimum acceptable quantity vault tokens to receive. Reverts otherwise @param _swapTarget Excecution target for the swap @param swapData DEX quote data @param affiliate Affiliate address @return tokensReceived- Quantity of Vault tokens received */ function ZapInCurveVault( address fromToken, uint256 amountIn, address toToken, address toVault, uint256 minYVTokens, address _swapTarget, bytes calldata swapData, address affiliate ) external payable stopInEmergency returns (uint256 tokensReceived) { // get incoming tokens uint256 toInvest = _pullTokens(fromToken, amountIn, affiliate, true); // ZapIn to Curve address curveDepositAddr = curveReg.metaPools(IYVault(toVault).token()); uint256 curveLP; if (fromToken != address(0)) { IERC20(fromToken).safeApprove(address(curveZapIn), toInvest); curveLP = curveZapIn.ZapIn( fromToken, toToken, curveDepositAddr, toInvest, 0, _swapTarget, swapData, affiliate ); } else { curveLP = curveZapIn.ZapIn.value(toInvest)( fromToken, toToken, curveDepositAddr, toInvest, 0, _swapTarget, swapData, affiliate ); } // Deposit to Vault tokensReceived = _vaultDeposit( IYVault(toVault).token(), curveLP, toVault, minYVTokens ); } function _vaultDeposit( address underlyingVaultToken, uint256 amount, address toVault, uint256 minTokensRec ) internal returns (uint256 tokensReceived) { IERC20(underlyingVaultToken).safeApprove(toVault, amount); uint256 iniYVaultBal = IERC20(toVault).balanceOf(address(this)); IYVault(toVault).deposit(amount); tokensReceived = IERC20(toVault).balanceOf(address(this)).sub( iniYVaultBal ); require(tokensReceived >= minTokensRec, "Err: High Slippage"); IERC20(toVault).safeTransfer(msg.sender, tokensReceived); emit zapIn(msg.sender, toVault, tokensReceived); } function _fillQuote( address _fromTokenAddress, address toToken, uint256 _amount, address _swapTarget, bytes memory swapCallData ) internal returns (uint256 amtBought) { uint256 valueToSend; if (_fromTokenAddress == toToken) { return _amount; } if (_fromTokenAddress == address(0)) { valueToSend = _amount; } else { IERC20 fromToken = IERC20(_fromTokenAddress); fromToken.safeApprove(address(_swapTarget), 0); fromToken.safeApprove(address(_swapTarget), _amount); } uint256 iniBal = _getBalance(toToken); (bool success, ) = _swapTarget.call.value(valueToSend)(swapCallData); require(success, "Error Swapping Tokens 1"); uint256 finalBal = _getBalance(toToken); amtBought = finalBal.sub(iniBal); } function _getBalance(address token) internal view returns (uint256 balance) { if (token == address(0)) { balance = address(this).balance; } else { balance = IERC20(token).balanceOf(address(this)); } } ///@notice enableGoodwill should be false if vault contains Curve LP, otherwise true function _pullTokens( address token, uint256 amount, address affiliate, bool enableGoodwill ) internal returns (uint256 value) { uint256 totalGoodwillPortion; if (token == address(0)) { require(msg.value > 0, "No eth sent"); // subtract goodwill totalGoodwillPortion = _subtractGoodwill( ETHAddress, msg.value, affiliate, enableGoodwill ); return msg.value.sub(totalGoodwillPortion); } require(amount > 0, "Invalid token amount"); require(msg.value == 0, "Eth sent with token"); //transfer token IERC20(token).safeTransferFrom(msg.sender, address(this), amount); // subtract goodwill totalGoodwillPortion = _subtractGoodwill( token, amount, affiliate, enableGoodwill ); return amount.sub(totalGoodwillPortion); } function _subtractGoodwill( address token, uint256 amount, address affiliate, bool enableGoodwill ) internal returns (uint256 totalGoodwillPortion) { bool whitelisted = feeWhitelist[msg.sender]; if (enableGoodwill && !whitelisted && goodwill > 0) { totalGoodwillPortion = SafeMath.div( SafeMath.mul(amount, goodwill), 10000 ); if (affiliates[affiliate]) { uint256 affiliatePortion = totalGoodwillPortion .mul(affiliateSplit) .div(100); affiliateBalance[affiliate][token] = affiliateBalance[affiliate][token] .add(affiliatePortion); totalAffiliateBalance[token] = totalAffiliateBalance[token].add( affiliatePortion ); } } } function updateCurveRegistry(ICurveRegistry newCurveRegistry) external onlyOwner { require(newCurveRegistry != curveReg, "Already using this Registry"); curveReg = newCurveRegistry; } function updateCurveZapIn(ICurveZapIn newCurveZapIn) external onlyOwner { require(newCurveZapIn != curveZapIn, "Already using this ZapIn"); curveZapIn = newCurveZapIn; } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } function set_new_goodwill(uint16 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill <= 100, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function set_feeWhitelist(address zapAddress, bool status) external onlyOwner { feeWhitelist[zapAddress] = status; } function set_new_affiliateSplit(uint16 _new_affiliateSplit) external onlyOwner { require( _new_affiliateSplit <= 100, "Affiliate Split Value not allowed" ); affiliateSplit = _new_affiliateSplit; } function set_affiliate(address _affiliate, bool _status) external onlyOwner { affiliates[_affiliate] = _status; } ///@notice Withdraw goodwill share, retaining affilliate share function withdrawTokens(address[] calldata tokens) external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { uint256 qty; if (tokens[i] == ETHAddress) { qty = address(this).balance.sub( totalAffiliateBalance[tokens[i]] ); Address.sendValue(Address.toPayable(owner()), qty); } else { qty = IERC20(tokens[i]).balanceOf(address(this)).sub( totalAffiliateBalance[tokens[i]] ); IERC20(tokens[i]).safeTransfer(owner(), qty); } } } ///@notice Withdraw affilliate share, retaining goodwill share function affilliateWithdraw(address[] calldata tokens) external { uint256 tokenBal; for (uint256 i = 0; i < tokens.length; i++) { tokenBal = affiliateBalance[msg.sender][tokens[i]]; affiliateBalance[msg.sender][tokens[i]] = 0; totalAffiliateBalance[tokens[i]] = totalAffiliateBalance[tokens[i]] .sub(tokenBal); if (tokens[i] == ETHAddress) { Address.sendValue(msg.sender, tokenBal); } else { IERC20(tokens[i]).safeTransfer(msg.sender, tokenBal); } } } function() external payable { require(msg.sender != tx.origin, "Do not send ETH directly"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ICurveRegistry","name":"_curveReg","type":"address"},{"internalType":"contract ICurveZapIn","name":"_curveZapIn","type":"address"},{"internalType":"uint256","name":"_goodwill","type":"uint256"},{"internalType":"uint256","name":"_affiliateSplit","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensRec","type":"uint256"}],"name":"zapIn","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"address","name":"toVault","type":"address"},{"internalType":"uint256","name":"minYVTokens","type":"uint256"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapInCurveVault","outputs":[{"internalType":"uint256","name":"tokensReceived","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"toVault","type":"address"},{"internalType":"bool","name":"isAaveUnderlying","type":"bool"},{"internalType":"uint256","name":"minYVTokens","type":"uint256"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"ZapInTokenVault","outputs":[{"internalType":"uint256","name":"tokensReceived","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"affiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"affilliateWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"curveReg","outputs":[{"internalType":"contract ICurveRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"curveZapIn","outputs":[{"internalType":"contract ICurveZapIn","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_affiliate","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"set_affiliate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"zapAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"set_feeWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_affiliateSplit","type":"uint16"}],"name":"set_new_affiliateSplit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalAffiliateBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ICurveRegistry","name":"newCurveRegistry","type":"address"}],"name":"updateCurveRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ICurveZapIn","name":"newCurveZapIn","type":"address"}],"name":"updateCurveZapIn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b1916905534801561001d57600080fd5b50604051620029d6380380620029d68339818101604052608081101561004257600080fd5b508051602082015160408301516060909301516000805460ff19166001178155929391926100776001600160e01b0361010716565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b039586166001600160a01b031991821617909155600880549490951693169290921790925560029190915560035561010b565b3390565b6128bb806200011b6000396000f3fe60806040526004361061014b5760003560e01c806375f12b21116100b6578063bb0abba71161006f578063bb0abba714610502578063c76072e8146105af578063d408f6571461065c578063e59533821461068f578063f2fde38b146106c2578063fbec27bf146106f55761014b565b806375f12b21146104525780638da5cb5b146104675780638f32d59b1461047c578063a996713214610491578063b10e1dbc146104bf578063b2bdfa7b146104ed5761014b565b80633ff428c7116101085780633ff428c7146103165780634f51e2941461035157806352dcacd0146103985780635de0398e146103ad5780635ecb16cd146103c2578063715018a61461043d5761014b565b80630dc9de85146101a25780631385d24c1461021d5780631781261f1461023257806318b135e31461027f578063374b09f8146102b2578063399355d3146102e3575b333214156101a0576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b3480156101ae57600080fd5b506101a0600480360360208110156101c557600080fd5b810190602081018135600160201b8111156101df57600080fd5b8201836020820111156101f157600080fd5b803590602001918460208302840111600160201b8311171561021257600080fd5b509092509050610730565b34801561022957600080fd5b506101a0610910565b34801561023e57600080fd5b5061026d6004803603604081101561025557600080fd5b506001600160a01b0381358116916020013516610978565b60408051918252519081900360200190f35b34801561028b57600080fd5b5061026d600480360360208110156102a257600080fd5b50356001600160a01b0316610995565b3480156102be57600080fd5b506102c76109a7565b604080516001600160a01b039092168252519081900360200190f35b3480156102ef57600080fd5b506101a06004803603602081101561030657600080fd5b50356001600160a01b03166109b6565b34801561032257600080fd5b506101a06004803603604081101561033957600080fd5b506001600160a01b0381351690602001351515610a82565b34801561035d57600080fd5b506103846004803603602081101561037457600080fd5b50356001600160a01b0316610af4565b604080519115158252519081900360200190f35b3480156103a457600080fd5b506102c7610b09565b3480156103b957600080fd5b5061026d610b18565b3480156103ce57600080fd5b506101a0600480360360208110156103e557600080fd5b810190602081018135600160201b8111156103ff57600080fd5b82018360208201111561041157600080fd5b803590602001918460208302840111600160201b8311171561043257600080fd5b509092509050610b1e565b34801561044957600080fd5b506101a0610d21565b34801561045e57600080fd5b50610384610db7565b34801561047357600080fd5b506102c7610dc7565b34801561048857600080fd5b50610384610ddb565b34801561049d57600080fd5b506101a0600480360360208110156104b457600080fd5b503561ffff16610e04565b3480156104cb57600080fd5b506101a0600480360360208110156104e257600080fd5b503561ffff16610e98565b3480156104f957600080fd5b506102c7610f42565b61026d600480360361010081101561051957600080fd5b6001600160a01b0382358116926020810135926040820135831692606083013515159260808101359260a08201359092169181019060e0810160c0820135600160201b81111561056857600080fd5b82018360208201111561057a57600080fd5b803590602001918460018302840111600160201b8311171561059b57600080fd5b9193509150356001600160a01b0316610f56565b61026d60048036036101008110156105c657600080fd5b6001600160a01b0382358116926020810135926040820135831692606083013581169260808101359260a08201359092169181019060e0810160c0820135600160201b81111561061557600080fd5b82018360208201111561062757600080fd5b803590602001918460018302840111600160201b8311171561064857600080fd5b9193509150356001600160a01b03166112d0565b34801561066857600080fd5b506103846004803603602081101561067f57600080fd5b50356001600160a01b031661176c565b34801561069b57600080fd5b506101a0600480360360208110156106b257600080fd5b50356001600160a01b0316611781565b3480156106ce57600080fd5b506101a0600480360360208110156106e557600080fd5b50356001600160a01b031661184d565b34801561070157600080fd5b506101a06004803603604081101561071857600080fd5b506001600160a01b03813516906020013515156118a0565b6000805b8281101561090a573360009081526005602052604081209085858481811061075857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008686858181106107c057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610847826006600087878681811061080857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205461191290919063ffffffff16565b6006600086868581811061085757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848381811061089b57fe5b905060200201356001600160a01b03166001600160a01b031614156108c9576108c4338361195d565b610902565b61090233838686858181106108da57fe5b905060200201356001600160a01b03166001600160a01b0316611a429092919063ffffffff16565b600101610734565b50505050565b610918610ddb565b610957576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6007546001600160a01b031681565b6109be610ddb565b6109fd576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415610a60576040805162461bcd60e51b815260206004820152601860248201527f416c7265616479207573696e672074686973205a6170496e0000000000000000604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610a8a610ddb565b610ac9576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b6008546001600160a01b031681565b60025481565b610b26610ddb565b610b65576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60005b81811015610d1c57600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848484818110610b9357fe5b905060200201356001600160a01b03166001600160a01b03161415610c2557610c0560066000868686818110610bc557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020544761191290919063ffffffff16565b9050610c20610c1a610c15610dc7565b611a94565b8261195d565b610d13565b610cf960066000868686818110610c3857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054858585818110610c7557fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b505050506040513d6020811015610ceb57600080fd5b50519063ffffffff61191216565b9050610d13610d06610dc7565b828686868181106108da57fe5b50600101610b68565b505050565b610d29610ddb565b610d68576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610df5611a9b565b6001600160a01b031614905090565b610e0c610ddb565b610e4b576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60648161ffff161115610e8f5760405162461bcd60e51b81526004018080602001828103825260218152602001806127e66021913960400191505060405180910390fd5b61ffff16600355565b610ea0610ddb565b610edf576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60648161ffff161115610f39576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b61ffff16600255565b60005461010090046001600160a01b031681565b60008054600160a81b900460ff1615610fab576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000610fba8b8b856001611a9f565b90506000896001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff757600080fd5b505afa15801561100b573d6000803e3d6000fd5b505050506040513d602081101561102157600080fd5b505190506000891561126d576000826001600160a01b03166389d1a0fc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b505050506040513d602081101561109457600080fd5b810190808051906020019092919050505090506110ea8e82868c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c0792505050565b915061117f7324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561113c57600080fd5b505afa158015611150573d6000803e3d6000fd5b505050506040513d602081101561116657600080fd5b50516001600160a01b038316908463ffffffff611dae16565b7324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111cc57600080fd5b505afa1580156111e0573d6000803e3d6000fd5b505050506040513d60208110156111f657600080fd5b505160408051636968703360e11b81526001600160a01b03848116600483015260248201869052600060448301819052925193169263d2d0e0669260648084019391929182900301818387803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b50505050506112b3565b6112b08d83858b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c0792505050565b90505b6112bf82828d8c611ec1565b9d9c50505050505050505050505050565b60008054600160a81b900460ff1615611325576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60006113348b8b856001611a9f565b90506000600760009054906101000a90046001600160a01b03166001600160a01b03166324452aaf8a6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561139557600080fd5b505afa1580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b15801561140657600080fd5b505afa15801561141a573d6000803e3d6000fd5b505050506040513d602081101561143057600080fd5b5051905060006001600160a01b038d16156115b257600854611465906001600160a01b038f811691168563ffffffff611dae16565b600860009054906101000a90046001600160a01b03166001600160a01b03166364c98c6c8e8d858760008e8e8e8e6040518a63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001856001600160a01b03166001600160a01b0316815260200180602001836001600160a01b03166001600160a01b031681526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509a5050505050505050505050602060405180830381600087803b15801561157f57600080fd5b505af1158015611593573d6000803e3d6000fd5b505050506040513d60208110156115a957600080fd5b505190506116fc565b600860009054906101000a90046001600160a01b03166001600160a01b03166364c98c6c848f8e868860008f8f8f8f6040518b63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001856001600160a01b03166001600160a01b0316815260200180602001836001600160a01b03166001600160a01b031681526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509a50505050505050505050506020604051808303818588803b1580156116cc57600080fd5b505af11580156116e0573d6000803e3d6000fd5b50505050506040513d60208110156116f757600080fd5b505190505b6112bf8a6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b5051828c8c611ec1565b60016020526000908152604090205460ff1681565b611789610ddb565b6117c8576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6007546001600160a01b038281169116141561182b576040805162461bcd60e51b815260206004820152601b60248201527f416c7265616479207573696e6720746869732052656769737472790000000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611855610ddb565b611894576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b61189d816120ba565b50565b6118a8610ddb565b6118e7576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b600061195483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612165565b90505b92915050565b804710156119b2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146119fd576040519150601f19603f3d011682016040523d82523d6000602084013e611a02565b606091505b5050905080610d1c5760405162461bcd60e51b815260040180806020018281038252603a81526020018061278b603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d1c9084906121fc565b805b919050565b3390565b6000806001600160a01b038616611b2d5760003411611af3576040805162461bcd60e51b815260206004820152600b60248201526a139bc8195d1a081cd95b9d60aa1b604482015290519081900360640190fd5b611b1373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3486866123b4565b9050611b25348263ffffffff61191216565b915050611bff565b60008511611b79576040805162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081d1bdad95b88185b5bdd5b9d60621b604482015290519081900360640190fd5b3415611bc2576040805162461bcd60e51b815260206004820152601360248201527222ba341039b2b73a103bb4ba34103a37b5b2b760691b604482015290519081900360640190fd5b611bdd6001600160a01b03871633308863ffffffff6124e816565b611be9868686866123b4565b9050611bfb858263ffffffff61191216565b9150505b949350505050565b600080856001600160a01b0316876001600160a01b03161415611c2d5784915050611da5565b6001600160a01b038716611c42575083611c7a565b86611c5e6001600160a01b03821686600063ffffffff611dae16565b611c786001600160a01b038216868863ffffffff611dae16565b505b6000611c8587612542565b90506000856001600160a01b031683866040518082805190602001908083835b60208310611cc45780518252601f199092019160209182019101611ca5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d26576040519150601f19603f3d011682016040523d82523d6000602084013e611d2b565b606091505b5050905080611d81576040805162461bcd60e51b815260206004820152601760248201527f4572726f72205377617070696e6720546f6b656e732031000000000000000000604482015290519081900360640190fd5b6000611d8c89612542565b9050611d9e818463ffffffff61191216565b9450505050505b95945050505050565b801580611e34575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611e0657600080fd5b505afa158015611e1a573d6000803e3d6000fd5b505050506040513d6020811015611e3057600080fd5b5051155b611e6f5760405162461bcd60e51b81526004018080602001828103825260368152602001806128516036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610d1c9084906121fc565b6000611edd6001600160a01b038616848663ffffffff611dae16565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611f2757600080fd5b505afa158015611f3b573d6000803e3d6000fd5b505050506040513d6020811015611f5157600080fd5b50516040805163b6b55f2560e01b81526004810188905290519192506001600160a01b0386169163b6b55f259160248082019260009290919082900301818387803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905161200393508492506001600160a01b038816916370a08231916024808301926020929190829003018186803b158015610cc157600080fd5b91508282101561204f576040805162461bcd60e51b81526020600482015260126024820152714572723a204869676820536c69707061676560701b604482015290519081900360640190fd5b6120696001600160a01b038516338463ffffffff611a4216565b604080513381526001600160a01b038616602082015280820184905290517f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d9181900360600190a150949350505050565b6001600160a01b0381166120ff5760405162461bcd60e51b81526004018080602001828103825260268152602001806127656026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156121f45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121b95781810151838201526020016121a1565b50505050905090810190601f1680156121e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61220e826001600160a01b03166125d1565b61225f576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061229d5780518252601f19909201916020918201910161227e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146122ff576040519150601f19603f3d011682016040523d82523d6000602084013e612304565b606091505b50915091508161235b576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561090a5780806020019051602081101561237757600080fd5b505161090a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612827602a913960400191505060405180910390fd5b3360009081526001602052604081205460ff168280156123d2575080155b80156123e057506000600254115b156124df576123fc6123f48660025461260a565b612710612663565b6001600160a01b03851660009081526004602052604090205490925060ff16156124df576000612448606461243c6003548661260a90919063ffffffff16565b9063ffffffff61266316565b6001600160a01b038087166000908152600560209081526040808320938c1683529290522054909150612481908263ffffffff6126a516565b6001600160a01b038087166000908152600560209081526040808320938c1683529281528282209390935560069092529020546124c4908263ffffffff6126a516565b6001600160a01b038816600090815260066020526040902055505b50949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261090a9085906121fc565b60006001600160a01b038216612559575047611a96565b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d60208110156125c957600080fd5b505192915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611bff575050151592915050565b60008261261957506000611957565b8282028284828161262657fe5b04146119545760405162461bcd60e51b81526004018080602001828103825260218152602001806127c56021913960400191505060405180910390fd5b600061195483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126ff565b600082820183811015611954576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818361274e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121b95781810151838201526020016121a1565b50600083858161275a57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a7231582073c9d5b827da891c7142e7592f4f2f351860078f6ad9c78ea590121119f89acc64736f6c63430005110032000000000000000000000000fedba6539cbc0bf508cff780793225780a24705400000000000000000000000075987eb3cb933e355474c5ffc4905ecb6061796b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014b5760003560e01c806375f12b21116100b6578063bb0abba71161006f578063bb0abba714610502578063c76072e8146105af578063d408f6571461065c578063e59533821461068f578063f2fde38b146106c2578063fbec27bf146106f55761014b565b806375f12b21146104525780638da5cb5b146104675780638f32d59b1461047c578063a996713214610491578063b10e1dbc146104bf578063b2bdfa7b146104ed5761014b565b80633ff428c7116101085780633ff428c7146103165780634f51e2941461035157806352dcacd0146103985780635de0398e146103ad5780635ecb16cd146103c2578063715018a61461043d5761014b565b80630dc9de85146101a25780631385d24c1461021d5780631781261f1461023257806318b135e31461027f578063374b09f8146102b2578063399355d3146102e3575b333214156101a0576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b3480156101ae57600080fd5b506101a0600480360360208110156101c557600080fd5b810190602081018135600160201b8111156101df57600080fd5b8201836020820111156101f157600080fd5b803590602001918460208302840111600160201b8311171561021257600080fd5b509092509050610730565b34801561022957600080fd5b506101a0610910565b34801561023e57600080fd5b5061026d6004803603604081101561025557600080fd5b506001600160a01b0381358116916020013516610978565b60408051918252519081900360200190f35b34801561028b57600080fd5b5061026d600480360360208110156102a257600080fd5b50356001600160a01b0316610995565b3480156102be57600080fd5b506102c76109a7565b604080516001600160a01b039092168252519081900360200190f35b3480156102ef57600080fd5b506101a06004803603602081101561030657600080fd5b50356001600160a01b03166109b6565b34801561032257600080fd5b506101a06004803603604081101561033957600080fd5b506001600160a01b0381351690602001351515610a82565b34801561035d57600080fd5b506103846004803603602081101561037457600080fd5b50356001600160a01b0316610af4565b604080519115158252519081900360200190f35b3480156103a457600080fd5b506102c7610b09565b3480156103b957600080fd5b5061026d610b18565b3480156103ce57600080fd5b506101a0600480360360208110156103e557600080fd5b810190602081018135600160201b8111156103ff57600080fd5b82018360208201111561041157600080fd5b803590602001918460208302840111600160201b8311171561043257600080fd5b509092509050610b1e565b34801561044957600080fd5b506101a0610d21565b34801561045e57600080fd5b50610384610db7565b34801561047357600080fd5b506102c7610dc7565b34801561048857600080fd5b50610384610ddb565b34801561049d57600080fd5b506101a0600480360360208110156104b457600080fd5b503561ffff16610e04565b3480156104cb57600080fd5b506101a0600480360360208110156104e257600080fd5b503561ffff16610e98565b3480156104f957600080fd5b506102c7610f42565b61026d600480360361010081101561051957600080fd5b6001600160a01b0382358116926020810135926040820135831692606083013515159260808101359260a08201359092169181019060e0810160c0820135600160201b81111561056857600080fd5b82018360208201111561057a57600080fd5b803590602001918460018302840111600160201b8311171561059b57600080fd5b9193509150356001600160a01b0316610f56565b61026d60048036036101008110156105c657600080fd5b6001600160a01b0382358116926020810135926040820135831692606083013581169260808101359260a08201359092169181019060e0810160c0820135600160201b81111561061557600080fd5b82018360208201111561062757600080fd5b803590602001918460018302840111600160201b8311171561064857600080fd5b9193509150356001600160a01b03166112d0565b34801561066857600080fd5b506103846004803603602081101561067f57600080fd5b50356001600160a01b031661176c565b34801561069b57600080fd5b506101a0600480360360208110156106b257600080fd5b50356001600160a01b0316611781565b3480156106ce57600080fd5b506101a0600480360360208110156106e557600080fd5b50356001600160a01b031661184d565b34801561070157600080fd5b506101a06004803603604081101561071857600080fd5b506001600160a01b03813516906020013515156118a0565b6000805b8281101561090a573360009081526005602052604081209085858481811061075857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020549150600060056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008686858181106107c057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610847826006600087878681811061080857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205461191290919063ffffffff16565b6006600086868581811061085757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee84848381811061089b57fe5b905060200201356001600160a01b03166001600160a01b031614156108c9576108c4338361195d565b610902565b61090233838686858181106108da57fe5b905060200201356001600160a01b03166001600160a01b0316611a429092919063ffffffff16565b600101610734565b50505050565b610918610ddb565b610957576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600560209081526000928352604080842090915290825290205481565b60066020526000908152604090205481565b6007546001600160a01b031681565b6109be610ddb565b6109fd576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415610a60576040805162461bcd60e51b815260206004820152601860248201527f416c7265616479207573696e672074686973205a6170496e0000000000000000604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610a8a610ddb565b610ac9576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60046020526000908152604090205460ff1681565b6008546001600160a01b031681565b60025481565b610b26610ddb565b610b65576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60005b81811015610d1c57600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee848484818110610b9357fe5b905060200201356001600160a01b03166001600160a01b03161415610c2557610c0560066000868686818110610bc557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020544761191290919063ffffffff16565b9050610c20610c1a610c15610dc7565b611a94565b8261195d565b610d13565b610cf960066000868686818110610c3857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054858585818110610c7557fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b505050506040513d6020811015610ceb57600080fd5b50519063ffffffff61191216565b9050610d13610d06610dc7565b828686868181106108da57fe5b50600101610b68565b505050565b610d29610ddb565b610d68576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610df5611a9b565b6001600160a01b031614905090565b610e0c610ddb565b610e4b576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60648161ffff161115610e8f5760405162461bcd60e51b81526004018080602001828103825260218152602001806127e66021913960400191505060405180910390fd5b61ffff16600355565b610ea0610ddb565b610edf576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b60648161ffff161115610f39576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b61ffff16600255565b60005461010090046001600160a01b031681565b60008054600160a81b900460ff1615610fab576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6000610fba8b8b856001611a9f565b90506000896001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff757600080fd5b505afa15801561100b573d6000803e3d6000fd5b505050506040513d602081101561102157600080fd5b505190506000891561126d576000826001600160a01b03166389d1a0fc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b505050506040513d602081101561109457600080fd5b810190808051906020019092919050505090506110ea8e82868c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c0792505050565b915061117f7324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561113c57600080fd5b505afa158015611150573d6000803e3d6000fd5b505050506040513d602081101561116657600080fd5b50516001600160a01b038316908463ffffffff611dae16565b7324a42fd28c976a61df5d00d0599c34c4f90748c86001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111cc57600080fd5b505afa1580156111e0573d6000803e3d6000fd5b505050506040513d60208110156111f657600080fd5b505160408051636968703360e11b81526001600160a01b03848116600483015260248201869052600060448301819052925193169263d2d0e0669260648084019391929182900301818387803b15801561124f57600080fd5b505af1158015611263573d6000803e3d6000fd5b50505050506112b3565b6112b08d83858b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c0792505050565b90505b6112bf82828d8c611ec1565b9d9c50505050505050505050505050565b60008054600160a81b900460ff1615611325576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60006113348b8b856001611a9f565b90506000600760009054906101000a90046001600160a01b03166001600160a01b03166324452aaf8a6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561139557600080fd5b505afa1580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b15801561140657600080fd5b505afa15801561141a573d6000803e3d6000fd5b505050506040513d602081101561143057600080fd5b5051905060006001600160a01b038d16156115b257600854611465906001600160a01b038f811691168563ffffffff611dae16565b600860009054906101000a90046001600160a01b03166001600160a01b03166364c98c6c8e8d858760008e8e8e8e6040518a63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001856001600160a01b03166001600160a01b0316815260200180602001836001600160a01b03166001600160a01b031681526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509a5050505050505050505050602060405180830381600087803b15801561157f57600080fd5b505af1158015611593573d6000803e3d6000fd5b505050506040513d60208110156115a957600080fd5b505190506116fc565b600860009054906101000a90046001600160a01b03166001600160a01b03166364c98c6c848f8e868860008f8f8f8f6040518b63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001878152602001868152602001856001600160a01b03166001600160a01b0316815260200180602001836001600160a01b03166001600160a01b031681526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509a50505050505050505050506020604051808303818588803b1580156116cc57600080fd5b505af11580156116e0573d6000803e3d6000fd5b50505050506040513d60208110156116f757600080fd5b505190505b6112bf8a6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b5051828c8c611ec1565b60016020526000908152604090205460ff1681565b611789610ddb565b6117c8576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6007546001600160a01b038281169116141561182b576040805162461bcd60e51b815260206004820152601b60248201527f416c7265616479207573696e6720746869732052656769737472790000000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611855610ddb565b611894576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b61189d816120ba565b50565b6118a8610ddb565b6118e7576040805162461bcd60e51b81526020600482018190526024820152600080516020612807833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b600061195483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612165565b90505b92915050565b804710156119b2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146119fd576040519150601f19603f3d011682016040523d82523d6000602084013e611a02565b606091505b5050905080610d1c5760405162461bcd60e51b815260040180806020018281038252603a81526020018061278b603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d1c9084906121fc565b805b919050565b3390565b6000806001600160a01b038616611b2d5760003411611af3576040805162461bcd60e51b815260206004820152600b60248201526a139bc8195d1a081cd95b9d60aa1b604482015290519081900360640190fd5b611b1373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3486866123b4565b9050611b25348263ffffffff61191216565b915050611bff565b60008511611b79576040805162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081d1bdad95b88185b5bdd5b9d60621b604482015290519081900360640190fd5b3415611bc2576040805162461bcd60e51b815260206004820152601360248201527222ba341039b2b73a103bb4ba34103a37b5b2b760691b604482015290519081900360640190fd5b611bdd6001600160a01b03871633308863ffffffff6124e816565b611be9868686866123b4565b9050611bfb858263ffffffff61191216565b9150505b949350505050565b600080856001600160a01b0316876001600160a01b03161415611c2d5784915050611da5565b6001600160a01b038716611c42575083611c7a565b86611c5e6001600160a01b03821686600063ffffffff611dae16565b611c786001600160a01b038216868863ffffffff611dae16565b505b6000611c8587612542565b90506000856001600160a01b031683866040518082805190602001908083835b60208310611cc45780518252601f199092019160209182019101611ca5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d26576040519150601f19603f3d011682016040523d82523d6000602084013e611d2b565b606091505b5050905080611d81576040805162461bcd60e51b815260206004820152601760248201527f4572726f72205377617070696e6720546f6b656e732031000000000000000000604482015290519081900360640190fd5b6000611d8c89612542565b9050611d9e818463ffffffff61191216565b9450505050505b95945050505050565b801580611e34575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611e0657600080fd5b505afa158015611e1a573d6000803e3d6000fd5b505050506040513d6020811015611e3057600080fd5b5051155b611e6f5760405162461bcd60e51b81526004018080602001828103825260368152602001806128516036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610d1c9084906121fc565b6000611edd6001600160a01b038616848663ffffffff611dae16565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611f2757600080fd5b505afa158015611f3b573d6000803e3d6000fd5b505050506040513d6020811015611f5157600080fd5b50516040805163b6b55f2560e01b81526004810188905290519192506001600160a01b0386169163b6b55f259160248082019260009290919082900301818387803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905161200393508492506001600160a01b038816916370a08231916024808301926020929190829003018186803b158015610cc157600080fd5b91508282101561204f576040805162461bcd60e51b81526020600482015260126024820152714572723a204869676820536c69707061676560701b604482015290519081900360640190fd5b6120696001600160a01b038516338463ffffffff611a4216565b604080513381526001600160a01b038616602082015280820184905290517f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d9181900360600190a150949350505050565b6001600160a01b0381166120ff5760405162461bcd60e51b81526004018080602001828103825260268152602001806127656026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081848411156121f45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156121b95781810151838201526020016121a1565b50505050905090810190601f1680156121e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61220e826001600160a01b03166125d1565b61225f576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061229d5780518252601f19909201916020918201910161227e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146122ff576040519150601f19603f3d011682016040523d82523d6000602084013e612304565b606091505b50915091508161235b576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561090a5780806020019051602081101561237757600080fd5b505161090a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612827602a913960400191505060405180910390fd5b3360009081526001602052604081205460ff168280156123d2575080155b80156123e057506000600254115b156124df576123fc6123f48660025461260a565b612710612663565b6001600160a01b03851660009081526004602052604090205490925060ff16156124df576000612448606461243c6003548661260a90919063ffffffff16565b9063ffffffff61266316565b6001600160a01b038087166000908152600560209081526040808320938c1683529290522054909150612481908263ffffffff6126a516565b6001600160a01b038087166000908152600560209081526040808320938c1683529281528282209390935560069092529020546124c4908263ffffffff6126a516565b6001600160a01b038816600090815260066020526040902055505b50949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261090a9085906121fc565b60006001600160a01b038216612559575047611a96565b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d60208110156125c957600080fd5b505192915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611bff575050151592915050565b60008261261957506000611957565b8282028284828161262657fe5b04146119545760405162461bcd60e51b81526004018080602001828103825260218152602001806127c56021913960400191505060405180910390fd5b600061195483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126ff565b600082820183811015611954576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818361274e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156121b95781810151838201526020016121a1565b50600083858161275a57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416666696c696174652053706c69742056616c7565206e6f7420616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a7231582073c9d5b827da891c7142e7592f4f2f351860078f6ad9c78ea590121119f89acc64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fedba6539cbc0bf508cff780793225780a24705400000000000000000000000075987eb3cb933e355474c5ffc4905ecb6061796b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _curveReg (address): 0xFEdBa6539Cbc0bf508CFF780793225780A247054
Arg [1] : _curveZapIn (address): 0x75987EB3cB933E355474c5ffC4905ECB6061796b
Arg [2] : _goodwill (uint256): 0
Arg [3] : _affiliateSplit (uint256): 0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000fedba6539cbc0bf508cff780793225780a247054
Arg [1] : 00000000000000000000000075987eb3cb933e355474c5ffc4905ecb6061796b
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25987:12963:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38887:10;38901:9;38887:23;;38879:60;;;;;-1:-1:-1;;;38879:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25987:12963;38218:614;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38218:614:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38218:614:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;38218:614:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38218:614:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;38218:614:0;;-1:-1:-1;38218:614:0;-1:-1:-1;38218:614:0;:::i;36477:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36477:86:0;;;:::i;26455:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26455:71:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26455:71:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26557:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26557:56:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26557:56:0;-1:-1:-1;;;;;26557:56:0;;:::i;26911:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26911:30:0;;;:::i;:::-;;;;-1:-1:-1;;;;;26911:30:0;;;;;;;;;;;;;;36245:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36245:192:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36245:192:0;-1:-1:-1;;;;;36245:192:0;;:::i;37262:150::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37262:150:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37262:150:0;;;;;;;;;;:::i;26369:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26369:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26369:42:0;-1:-1:-1;;;;;26369:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;26948:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26948:29:0;;;:::i;26244:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26244:23:0;;;:::i;37488:654::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37488:654:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37488:654:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37488:654:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37488:654:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;37488:654:0;;-1:-1:-1;37488:654:0;-1:-1:-1;37488:654:0;:::i;19296:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19296:140:0;;;:::i;26113:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26113:27:0;;;:::i;18485:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18485:79:0;;;:::i;18851:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18851:94:0;;;:::i;36977:277::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36977:277:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36977:277:0;;;;:::i;36571:237::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36571:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36571:237:0;;;;:::i;17980:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17980:29:0;;;:::i;28178:1676::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;28178:1676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28178:1676:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28178:1676:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28178:1676:0;;-1:-1:-1;28178:1676:0;-1:-1:-1;28178:1676:0;-1:-1:-1;;;;;28178:1676:0;;:::i;30478:1491::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;30478:1491:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30478:1491:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30478:1491:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30478:1491:0;;-1:-1:-1;30478:1491:0;-1:-1:-1;30478:1491:0;-1:-1:-1;;;;;30478:1491:0;;:::i;26191:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26191:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26191:44:0;-1:-1:-1;;;;;26191:44:0;;:::i;36008:229::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36008:229:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36008:229:0;-1:-1:-1;;;;;36008:229:0;;:::i;19591:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19591:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19591:117:0;-1:-1:-1;;;;;19591:117:0;;:::i;36816:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36816:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36816:153:0;;;;;;;;;;:::i;38218:614::-;38293:16;;38320:505;38340:17;;;38320:505;;;38407:10;38390:28;;;;:16;:28;;;;;;38419:6;;38426:1;38419:9;;;;;;;;;;;;;-1:-1:-1;;;;;38419:9:0;-1:-1:-1;;;;;38390:39:0;-1:-1:-1;;;;;38390:39:0;;;;;;;;;;;;;38379:50;;38486:1;38444:16;:28;38461:10;-1:-1:-1;;;;;38444:28:0;-1:-1:-1;;;;;38444:28:0;;;;;;;;;;;;:39;38473:6;;38480:1;38473:9;;;;;;;;;;;;;-1:-1:-1;;;;;38473:9:0;-1:-1:-1;;;;;38444:39:0;-1:-1:-1;;;;;38444:39:0;;;;;;;;;;;;:43;;;;38537:64;38592:8;38537:21;:32;38559:6;;38566:1;38559:9;;;;;;;;;;;;;-1:-1:-1;;;;;38559:9:0;-1:-1:-1;;;;;38537:32:0;-1:-1:-1;;;;;38537:32:0;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;38502:21;:32;38524:6;;38531:1;38524:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38524:9:0;38502:32;;-1:-1:-1;38502:32:0;;;;;;;;-1:-1:-1;38502:32:0;:99;26669:42;38622:6;;38629:1;38622:9;;;;;;;;;;;;;-1:-1:-1;;;;;38622:9:0;-1:-1:-1;;;;;38622:23:0;;38618:196;;;38666:39;38684:10;38696:8;38666:17;:39::i;:::-;38618:196;;;38746:52;38777:10;38789:8;38753:6;;38760:1;38753:9;;;;;;;;;;;;;-1:-1:-1;;;;;38753:9:0;-1:-1:-1;;;;;38746:30:0;;;:52;;;;;:::i;:::-;38359:3;;38320:505;;;;38218:614;;;:::o;36477:86::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;36548:7;;;-1:-1:-1;;;;36537:18:0;;-1:-1:-1;;;36548:7:0;;;;;;36547:8;36537:18;;;;;;36477:86::o;26455:71::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;26557:56::-;;;;;;;;;;;;;:::o;26911:30::-;;;-1:-1:-1;;;;;26911:30:0;;:::o;36245:192::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;36353:10;;-1:-1:-1;;;;;36336:27:0;;;36353:10;;36336:27;;36328:64;;;;;-1:-1:-1;;;36328:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36403:10;:26;;-1:-1:-1;;;;;;36403:26:0;-1:-1:-1;;;;;36403:26:0;;;;;;;;;;36245:192::o;37262:150::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37372:22:0;;;;;;;;:10;:22;;;;;:32;;-1:-1:-1;;37372:32:0;;;;;;;;;;37262:150::o;26369:42::-;;;;;;;;;;;;;;;:::o;26948:29::-;;;-1:-1:-1;;;;;26948:29:0;;:::o;26244:23::-;;;;:::o;37488:654::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;37574:9;37569:566;37589:17;;;37569:566;;;37628:11;26669:42;37660:6;;37667:1;37660:9;;;;;;;;;;;;;-1:-1:-1;;;;;37660:9:0;-1:-1:-1;;;;;37660:23:0;;37656:468;;;37710:99;37758:21;:32;37780:6;;37787:1;37780:9;;;;;;;;;;;;;-1:-1:-1;;;;;37780:9:0;-1:-1:-1;;;;;37758:32:0;-1:-1:-1;;;;;37758:32:0;;;;;;;;;;;;;37710:21;:25;;:99;;;;:::i;:::-;37704:105;;37828:50;37846:26;37864:7;:5;:7::i;:::-;37846:17;:26::i;:::-;37874:3;37828:17;:50::i;:::-;37656:468;;;37925:120;37994:21;:32;38016:6;;38023:1;38016:9;;;;;;;;;;;;;-1:-1:-1;;;;;38016:9:0;-1:-1:-1;;;;;37994:32:0;-1:-1:-1;;;;;37994:32:0;;;;;;;;;;;;;37932:6;;37939:1;37932:9;;;;;;;37925:42;;;-1:-1:-1;;;37925:42:0;;37961:4;37925:42;;;;;;37932:9;;;;;;;;;-1:-1:-1;;;;;37932:9:0;;37925:27;;-1:-1:-1;37925:42:0;;;;;37932:9;37925:42;;;;;37932:9;37925:42;;;5:2:-1;;;;30:1;27;20:12;5:2;37925:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37925:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37925:42:0;;:120;:46;:120;:::i;:::-;37919:126;;38064:44;38095:7;:5;:7::i;:::-;38104:3;38071:6;;38078:1;38071:9;;;;;;38064:44;-1:-1:-1;37608:3:0;;37569:566;;;;37488:654;;:::o;19296:140::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;19395:1;19379:6;;19358:40;;19379:6;;;;-1:-1:-1;;;;;19379:6:0;;19358:40;;19395:1;;19358:40;19426:1;19409:19;;-1:-1:-1;;;;;;19409:19:0;;;19296:140::o;26113:27::-;;;-1:-1:-1;;;26113:27:0;;;;;:::o;18485:79::-;18523:7;18550:6;;;;-1:-1:-1;;;;;18550:6:0;;18485:79::o;18851:94::-;18891:4;18931:6;;;;;-1:-1:-1;;;;;18931:6:0;18915:12;:10;:12::i;:::-;-1:-1:-1;;;;;18915:22:0;;18908:29;;18851:94;:::o;36977:277::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;37135:3;37112:19;:26;;;;37090:109;;;;-1:-1:-1;;;37090:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37210:36;;:14;:36;36977:277::o;36571:237::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;36708:3;36691:13;:20;;;;36647:118;;;;;-1:-1:-1;;;36647:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36776:24;;:8;:24;36571:237::o;17980:29::-;;;;;;-1:-1:-1;;;;;17980:29:0;;:::o;28178:1676::-;28487:22;27442:7;;-1:-1:-1;;;27442:7:0;;;;27438:102;;;27466:28;;;-1:-1:-1;;;27466:28:0;;;;;;;;;;;;-1:-1:-1;;;27466:28:0;;;;;;;;;;;;;;27438:102;28554:16;28573:49;28585:9;28596:8;28606:9;28617:4;28573:11;:49::i;:::-;28554:68;;28663:28;28702:7;-1:-1:-1;;;;;28694:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28694:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28694:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28694:24:0;;-1:-1:-1;28729:18:0;28758:898;;;;28795:23;28829:20;-1:-1:-1;;;;;28821:70:0;;:72;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28821:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28821:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28821:72:0;;;;;;;;;;;;;;;;28795:98;;28955:171;28984:9;29012:15;29046:8;29073:11;29103:8;;28955:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28955:10:0;;-1:-1:-1;;;28955:171:0:i;:::-;28942:184;;29143:145;26853:42;-1:-1:-1;;;;;29197:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29197:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29197:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29197:47:0;-1:-1:-1;;;;;29143:35:0;;;29263:10;29143:145;:35;:145;:::i;:::-;26853:42;-1:-1:-1;;;;;29320:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29320:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29320:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29320:43:0;29303:119;;;-1:-1:-1;;;29303:119:0;;-1:-1:-1;;;;;29303:119:0;;;;;;;;;;;;;29420:1;29303:119;;;;;;;;:87;;;;;:119;;;;;29420:1;;29303:119;;;;;;29420:1;29303:87;:119;;;5:2:-1;;;;30:1;27;20:12;5:2;29303:119:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29303:119:0;;;;28758:898;;;;29468:176;29497:9;29525:20;29564:8;29591:11;29621:8;;29468:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29468:10:0;;-1:-1:-1;;;29468:176:0:i;:::-;29455:189;;28758:898;29714:132;29742:20;29777:10;29802:7;29824:11;29714:13;:132::i;:::-;29697:149;28178:1676;-1:-1:-1;;;;;;;;;;;;;28178:1676:0:o;30478:1491::-;30781:22;27442:7;;-1:-1:-1;;;27442:7:0;;;;27438:102;;;27466:28;;;-1:-1:-1;;;27466:28:0;;;;;;;;;;;;-1:-1:-1;;;27466:28:0;;;;;;;;;;;;;;27438:102;30848:16;30867:49;30879:9;30890:8;30900:9;30911:4;30867:11;:49::i;:::-;30848:68;;30956:24;30983:8;;;;;;;;;-1:-1:-1;;;;;30983:8:0;-1:-1:-1;;;;;30983:18:0;;31010:7;-1:-1:-1;;;;;31002:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31002:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31002:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31002:24:0;30983:44;;;-1:-1:-1;;;;;;30983:44:0;;;;;;;-1:-1:-1;;;;;30983:44:0;;;;;;;;;;;;;31002:24;;30983:44;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;30983:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30983:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30983:44:0;;-1:-1:-1;31040:15:0;-1:-1:-1;;;;;31070:23:0;;;31066:704;;31148:10;;31110:60;;-1:-1:-1;;;;;31110:29:0;;;;31148:10;31161:8;31110:60;:29;:60;:::i;:::-;31195:10;;;;;;;;;-1:-1:-1;;;;;31195:10:0;-1:-1:-1;;;;;31195:16:0;;31230:9;31258:7;31284:16;31319:8;31346:1;31366:11;31396:8;;31423:9;31195:252;;;;;;;;;;;;;-1:-1:-1;;;;;31195:252:0;-1:-1:-1;;;;;31195:252:0;;;;;;-1:-1:-1;;;;;31195:252:0;-1:-1:-1;;;;;31195:252:0;;;;;;-1:-1:-1;;;;;31195:252:0;-1:-1:-1;;;;;31195:252:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31195:252:0;-1:-1:-1;;;;;31195:252:0;;;;;;;;;-1:-1:-1;;;;;31195:252:0;-1:-1:-1;;;;;31195:252:0;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31195:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31195:252:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31195:252:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31195:252:0;;-1:-1:-1;31066:704:0;;;31490:10;;;;;;;;;-1:-1:-1;;;;;31490:10:0;-1:-1:-1;;;;;31490:16:0;;31513:8;31541:9;31569:7;31595:16;31630:8;31657:1;31677:11;31707:8;;31734:9;31490:268;;;;;;;;;;;;;-1:-1:-1;;;;;31490:268:0;-1:-1:-1;;;;;31490:268:0;;;;;;-1:-1:-1;;;;;31490:268:0;-1:-1:-1;;;;;31490:268:0;;;;;;-1:-1:-1;;;;;31490:268:0;-1:-1:-1;;;;;31490:268:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31490:268:0;-1:-1:-1;;;;;31490:268:0;;;;;;;;;-1:-1:-1;;;;;31490:268:0;-1:-1:-1;;;;;31490:268:0;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31490:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31490:268:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31490:268:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31490:268:0;;-1:-1:-1;31066:704:0;31828:133;31864:7;-1:-1:-1;;;;;31856:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31856:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31856:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31856:24:0;31895:7;31917;31939:11;31828:13;:133::i;26191:44::-;;;;;;;;;;;;;;;:::o;36008:229::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;36151:8;;-1:-1:-1;;;;;36131:28:0;;;36151:8;;36131:28;;36123:68;;;;;-1:-1:-1;;;36123:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36202:8;:27;;-1:-1:-1;;;;;;36202:27:0;-1:-1:-1;;;;;36202:27:0;;;;;;;;;;36008:229::o;19591:117::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;19672:28;19691:8;19672:18;:28::i;:::-;19591:117;:::o;36816:153::-;18697:9;:7;:9::i;:::-;18689:54;;;;;-1:-1:-1;;;18689:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18689:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36928:24:0;;;;;;;;:12;:24;;;;;:33;;-1:-1:-1;;36928:33:0;;;;;;;;;;36816:153::o;3278:136::-;3336:7;3363:43;3367:1;3370;3363:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3356:50;;3278:136;;;;;:::o;15602:445::-;15731:6;15706:21;:31;;15684:110;;;;;-1:-1:-1;;;15684:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15881:32;;15863:12;;-1:-1:-1;;;;;15881:14:0;;;15902:6;;15863:12;15881:32;15863:12;15881:32;15902:6;15881:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;15862:51:0;;;15946:7;15924:115;;;;-1:-1:-1;;;15924:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20699:247;20869:58;;;-1:-1:-1;;;;;20869:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20869:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20816:122:0;;20849:5;;20816:18;:122::i;14466:159::-;14608:7;14466:159;;;;:::o;16965:98::-;17045:10;16965:98;:::o;34003:1054::-;34156:13;;-1:-1:-1;;;;;34227:19:0;;34223:372;;34283:1;34271:9;:13;34263:37;;;;;-1:-1:-1;;;34263:37:0;;;;;;;;;;;;-1:-1:-1;;;34263:37:0;;;;;;;;;;;;;;;34374:150;26669:42;34439:9;34467;34495:14;34374:17;:150::i;:::-;34351:173;-1:-1:-1;34548:35:0;:9;34351:173;34548:35;:13;:35;:::i;:::-;34541:42;;;;;34223:372;34622:1;34613:6;:10;34605:43;;;;;-1:-1:-1;;;34605:43:0;;;;;;;;;;;;-1:-1:-1;;;34605:43:0;;;;;;;;;;;;;;;34667:9;:14;34659:46;;;;;-1:-1:-1;;;34659:46:0;;;;;;;;;;;;-1:-1:-1;;;34659:46:0;;;;;;;;;;;;;;;34744:65;-1:-1:-1;;;;;34744:30:0;;34775:10;34795:4;34802:6;34744:65;:30;:65;:::i;:::-;34875:122;34907:5;34927:6;34948:9;34972:14;34875:17;:122::i;:::-;34852:145;-1:-1:-1;35017:32:0;:6;34852:145;35017:32;:10;:32;:::i;:::-;35010:39;;;34003:1054;;;;;;;:::o;32684:923::-;32883:17;32913:19;32970:7;-1:-1:-1;;;;;32949:28:0;:17;-1:-1:-1;;;;;32949:28:0;;32945:75;;;33001:7;32994:14;;;;;32945:75;-1:-1:-1;;;;;33036:31:0;;33032:290;;-1:-1:-1;33098:7:0;33032:290;;;33164:17;33197:46;-1:-1:-1;;;;;33197:21:0;;33227:11;33138:16;33197:46;:21;:46;:::i;:::-;33258:52;-1:-1:-1;;;;;33258:21:0;;33288:11;33302:7;33258:52;:21;:52;:::i;:::-;33032:290;;33334:14;33351:20;33363:7;33351:11;:20::i;:::-;33334:37;;33383:12;33401:11;-1:-1:-1;;;;;33401:16:0;33424:11;33437:12;33401:49;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33401:49:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;33382:68:0;;;33469:7;33461:43;;;;;-1:-1:-1;;;33461:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33515:16;33534:20;33546:7;33534:11;:20::i;:::-;33515:39;-1:-1:-1;33579:20:0;33515:39;33592:6;33579:20;:12;:20;:::i;:::-;33567:32;;32684:923;;;;;;;;;;;;:::o;21246:706::-;21664:10;;;21663:62;;-1:-1:-1;21680:39:0;;;-1:-1:-1;;;21680:39:0;;21704:4;21680:39;;;;-1:-1:-1;;;;;21680:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21680:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21680:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21680:39:0;:44;21663:62;21641:166;;;;-1:-1:-1;;;21641:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21871:62;;;-1:-1:-1;;;;;21871:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21871:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21818:126:0;;21851:5;;21818:18;:126::i;31977:699::-;32146:22;32181:57;-1:-1:-1;;;;;32181:40:0;;32222:7;32231:6;32181:57;:40;:57;:::i;:::-;32272:40;;;-1:-1:-1;;;32272:40:0;;32306:4;32272:40;;;;;;32249:20;;-1:-1:-1;;;;;32272:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;32272:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32272:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32272:40:0;32323:32;;;-1:-1:-1;;;32323:32:0;;;;;;;;;;32272:40;;-1:-1:-1;;;;;;32323:24:0;;;;;:32;;;;;-1:-1:-1;;32323:32:0;;;;;;;;-1:-1:-1;32323:24:0;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;32323:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;32383:40:0;;;-1:-1:-1;;;32383:40:0;;32417:4;32383:40;;;;;;:82;;-1:-1:-1;32442:12:0;;-1:-1:-1;;;;;;32383:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;32383:82:0;32366:99;;32504:12;32486:14;:30;;32478:61;;;;;-1:-1:-1;;;32478:61:0;;;;;;;;;;;;-1:-1:-1;;;32478:61:0;;;;;;;;;;;;;;;32552:56;-1:-1:-1;;;;;32552:28:0;;32581:10;32593:14;32552:56;:28;:56;:::i;:::-;32626:42;;;32632:10;32626:42;;-1:-1:-1;;;;;32626:42:0;;;;;;;;;;;;;;;;;;;;;;;31977:699;;;;;;;:::o;19814:274::-;-1:-1:-1;;;;;19910:22:0;;19888:110;;;;-1:-1:-1;;;19888:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20035:6;;;20014:38;;-1:-1:-1;;;;;20014:38:0;;;;20035:6;;;;;;20014:38;;;20063:6;:17;;-1:-1:-1;;;;;20063:17:0;;;;;-1:-1:-1;;;;;;20063:17:0;;;;;;;;;19814:274::o;3751:226::-;3871:7;3907:12;3899:6;;;;3891:29;;;;-1:-1:-1;;;3891:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3891:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3943:5:0;;;3751:226::o;23309:1176::-;23913:27;23921:5;-1:-1:-1;;;;;23913:25:0;;:27::i;:::-;23905:71;;;;;-1:-1:-1;;;23905:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24050:12;24064:23;24099:5;-1:-1:-1;;;;;24091:19:0;24111:4;24091:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;24091:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;24049:67:0;;;;24135:7;24127:52;;;;;-1:-1:-1;;;24127:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24196:17;;:21;24192:286;;24369:10;24358:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24358:30:0;24332:134;;;;-1:-1:-1;;;24332:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35065:935;35297:10;35224:28;35284:24;;;:12;:24;;;;;;;;35323:14;:30;;;;;35342:11;35341:12;35323:30;:46;;;;;35368:1;35357:8;;:12;35323:46;35319:674;;;35409:100;35440:30;35453:6;35461:8;;35440:12;:30::i;:::-;35489:5;35409:12;:100::i;:::-;-1:-1:-1;;;;;35530:21:0;;;;;;:10;:21;;;;;;35386:123;;-1:-1:-1;35530:21:0;;35526:456;;;35572:24;35599:93;35688:3;35599:62;35646:14;;35599:20;:46;;:62;;;;:::i;:::-;:88;:93;:88;:93;:::i;:::-;-1:-1:-1;;;;;35748:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;35572:120;;-1:-1:-1;35748:78:0;;35572:120;35748:78;:60;:78;:::i;:::-;-1:-1:-1;;;;;35711:27:0;;;;;;;:16;:27;;;;;;;;:34;;;;;;;;;;;:115;;;;35876:21;:28;;;;;;:90;;35931:16;35876:90;:32;:90;:::i;:::-;-1:-1:-1;;;;;35845:28:0;;;;;;:21;:28;;;;;:121;-1:-1:-1;35526:456:0;35065:935;;;;;;;:::o;20954:284::-;21151:68;;;-1:-1:-1;;;;;21151:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21151:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21098:132:0;;21131:5;;21098:18;:132::i;33615:290::-;33701:15;-1:-1:-1;;;;;33738:19:0;;33734:164;;-1:-1:-1;33784:21:0;33734:164;;;33848:38;;;-1:-1:-1;;;33848:38:0;;33880:4;33848:38;;;;;;-1:-1:-1;;;;;33848:23:0;;;;;:38;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;33848:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33848:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33848:38:0;;33615:290;-1:-1:-1;;33615:290:0:o;13590:659::-;13650:4;14149:20;;13979:66;14198:23;;;;;;:42;;-1:-1:-1;;14225:15:0;;;14190:51;-1:-1:-1;;13590:659:0:o;4228:471::-;4286:7;4531:6;4527:47;;-1:-1:-1;4561:1:0;4554:8;;4527:47;4598:5;;;4602:1;4598;:5;:1;4622:5;;;;;:10;4614:56;;;;-1:-1:-1;;;4614:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5167:132;5225:7;5252:39;5256:1;5259;5252:39;;;;;;;;;;;;;;;;;:3;:39::i;2822:181::-;2880:7;2912:5;;;2936:6;;;;2928:46;;;;;-1:-1:-1;;;2928:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5829:379;5949:7;6051:12;6044:5;6036:28;;;;-1:-1:-1;;;6036:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6036:28:0;;6075:9;6091:1;6087;:5;;;;;;;5829:379;-1:-1:-1;;;;;5829:379:0:o
Swarm Source
bzzr://73c9d5b827da891c7142e7592f4f2f351860078f6ad9c78ea590121119f89acc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $551.64 | 0.7784 | $429.4 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.