diff --git a/buidler.config.ts b/buidler.config.ts
index deaa7bcd..6e15ca7f 100644
--- a/buidler.config.ts
+++ b/buidler.config.ts
@@ -1,17 +1,19 @@
import path from 'path';
import fs from 'fs';
-import {usePlugin} from '@nomiclabs/buidler/config';
+import {usePlugin, task} from '@nomiclabs/buidler/config';
// @ts-ignore
import {accounts} from './test-wallets.js';
import {eEthereumNetwork} from './helpers/types';
import {BUIDLEREVM_CHAINID, COVERAGE_CHAINID} from './helpers/buidler-constants';
+import {setDRE} from './helpers/misc-utils';
+
+require('dotenv').config();
usePlugin('@nomiclabs/buidler-ethers');
usePlugin('buidler-typechain');
usePlugin('solidity-coverage');
usePlugin('@nomiclabs/buidler-waffle');
usePlugin('@nomiclabs/buidler-etherscan');
-usePlugin('buidler-gas-reporter');
const SKIP_LOAD = process.env.SKIP_LOAD === 'true';
const DEFAULT_BLOCK_GAS_LIMIT = 12450000;
@@ -22,15 +24,12 @@ const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || '';
const MNEMONIC_PATH = "m/44'/60'/0'/0";
const MNEMONIC = process.env.MNEMONIC || '';
-// Prevent to load scripts before compilation and typechain
-if (!SKIP_LOAD) {
- ['misc', 'migrations', 'dev', 'full'].forEach((folder) => {
- const tasksPath = path.join(__dirname, 'tasks', folder);
- fs.readdirSync(tasksPath)
- .filter((pth) => pth.includes('.ts'))
- .forEach((task) => require(`${tasksPath}/${task}`));
- });
-}
+task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction(
+ async (_, _DRE) => {
+ setDRE(_DRE);
+ return _DRE;
+ }
+);
const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number) => {
return {
diff --git a/config/aave.ts b/config/aave.ts
index 3c8923c2..76f08a9d 100644
--- a/config/aave.ts
+++ b/config/aave.ts
@@ -1,8 +1,29 @@
import BigNumber from 'bignumber.js';
-import {oneRay} from '../helpers/constants';
+import {oneRay, ZERO_ADDRESS} from '../helpers/constants';
import {IAaveConfiguration, EthereumNetwork, eEthereumNetwork} from '../helpers/types';
import {CommonsConfig} from './commons';
+import {
+ stablecoinStrategyBUSD,
+ stablecoinStrategyDAI,
+ stablecoinStrategySUSD,
+ stablecoinStrategyTUSD,
+ stablecoinStrategyUSDC,
+ stablecoinStrategyUSDT,
+ strategyAAVE,
+ strategyBase,
+ strategyKNC,
+ strategyLINK,
+ strategyMANA,
+ strategyMKR,
+ strategyREN,
+ strategyREP,
+ strategySNX,
+ strategyUNI,
+ strategyWBTC,
+ strategyWETH,
+ strategyYFI,
+} from './reservesConfigs';
// ----------------
// POOL--SPECIFIC PARAMS
@@ -12,307 +33,101 @@ export const AaveConfig: IAaveConfiguration = {
...CommonsConfig,
ConfigName: 'Aave',
ProviderId: 1,
- ReserveSymbols: [
- 'WETH',
- 'DAI',
- 'LEND',
- 'TUSD',
- 'BAT',
- 'USDC',
- 'USDT',
- 'SUSD',
- 'ZRX',
- 'MKR',
- 'WBTC',
- 'LINK',
- 'KNC',
- 'MANA',
- 'REP',
- 'SNX',
- 'BUSD',
- ],
ReservesConfig: {
- DAI: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.05).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '7500',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- TUSD: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '7500',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- USDC: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '7500',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '6',
- },
- USDT: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '-1',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '6',
- },
- SUSD: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '-1',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
- LEND: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- BAT: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- WETH: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '7500',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- LINK: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6500',
- liquidationThreshold: '7000',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- WBTC: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '8',
- },
- KNC: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- REP: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- MKR: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- MANA: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- ZRX: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6000',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: true,
- reserveDecimals: '18',
- },
- SNX: {
- baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '-1',
- liquidationThreshold: '6500',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
- BUSD: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '-1',
- liquidationThreshold: '8000',
- liquidationBonus: '11000',
- borrowingEnabled: true,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
+ AAVE: strategyAAVE,
+ BAT: strategyBase,
+ BUSD: stablecoinStrategyBUSD,
+ DAI: stablecoinStrategyDAI,
+ ENJ: strategyREN,
+ KNC: strategyKNC,
+ LINK: strategyLINK,
+ MANA: strategyMANA,
+ MKR: strategyMKR,
+ REN: strategyREN,
+ REP: strategyREP,
+ SNX: strategySNX,
+ SUSD: stablecoinStrategySUSD,
+ TUSD: stablecoinStrategyTUSD,
+ UNI: strategyUNI,
+ USDC: stablecoinStrategyUSDC,
+ USDT: stablecoinStrategyUSDT,
+ WBTC: strategyWBTC,
+ WETH: strategyWETH,
+ YFI: strategyYFI,
+ ZRX: strategyBase,
},
ReserveAssets: {
[eEthereumNetwork.buidlerevm]: {},
+ [eEthereumNetwork.hardhat]: {},
[eEthereumNetwork.coverage]: {},
[EthereumNetwork.kovan]: {
- WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
+ AAVE: '0xB597cd8D3217ea6477232F9217fa70837ff667Af',
+ BAT: '0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738',
+ BUSD: '0x4c6E1EFC12FDfD568186b7BAEc0A43fFfb4bCcCf',
DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD',
+ ENJ: '0xC64f90Cd7B564D3ab580eb20a102A8238E218be2',
+ KNC: '0x3F80c39c0b96A0945f9F0E9f55d8A8891c5671A8',
+ LINK: '0xAD5ce863aE3E4E9394Ab43d4ba0D80f419F61789',
+ MANA: '0x738Dc6380157429e957d223e6333Dc385c85Fec7',
+ MKR: '0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA',
+ REN: '0x5eebf65A6746eed38042353Ba84c8e37eD58Ac6f',
+ REP: '0x260071C8D61DAf730758f8BD0d6370353956AE0E',
+ SNX: '0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947',
+ SUSD: '0x99b267b9D96616f906D53c26dECf3C5672401282',
TUSD: '0x016750AC630F711882812f24Dba6c95b9D35856d',
+ UNI: '0x075A36BA8846C6B6F53644fDd3bf17E5151789DC',
USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422',
USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4',
- SUSD: '0xD868790F57B39C9B2B51b12de046975f986675f9',
- LEND: '0x690eAcA024935Aaff9B14b9FF9e9C8757a281f3C',
- BAT: '0x2d12186Fbb9f9a8C28B3FfdD4c42920f8539D738',
- REP: '0x260071C8D61DAf730758f8BD0d6370353956AE0E',
- MKR: '0x61e4CAE3DA7FD189e52a4879C7B8067D7C2Cc0FA',
- LINK: '0xAD5ce863aE3E4E9394Ab43d4ba0D80f419F61789',
- KNC: '0x3F80c39c0b96A0945f9F0E9f55d8A8891c5671A8',
WBTC: '0xD1B98B6607330172f1D991521145A22BCe793277',
- MANA: '0x738Dc6380157429e957d223e6333Dc385c85Fec7',
+ WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
+ YFI: '0xb7c325266ec274fEb1354021D27FA3E3379D840d',
ZRX: '0xD0d76886cF8D952ca26177EB7CfDf83bad08C00C',
- SNX: '0x7FDb81B0b8a010dd4FFc57C3fecbf145BA8Bd947',
- BUSD: '0x4c6E1EFC12FDfD568186b7BAEc0A43fFfb4bCcCf',
},
[EthereumNetwork.ropsten]: {
- WETH: '0xc778417e063141139fce010982780140aa0cd5ab',
+ AAVE: '',
+ BAT: '0x85B24b3517E3aC7bf72a14516160541A60cFF19d',
+ BUSD: '0xFA6adcFf6A90c11f31Bc9bb59eC0a6efB38381C6',
DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108',
+ ENJ: ZERO_ADDRESS,
+ KNC: '0xCe4aA1dE3091033Ba74FA2Ad951f6adc5E5cF361',
+ LINK: '0x1a906E71FF9e28d8E01460639EB8CF0a6f0e2486',
+ MANA: '0x78b1F763857C8645E46eAdD9540882905ff32Db7',
+ MKR: '0x2eA9df3bABe04451c9C3B06a2c844587c59d9C37',
+ REN: ZERO_ADDRESS,
+ REP: '0xBeb13523503d35F9b3708ca577CdCCAdbFB236bD',
+ SNX: '0xF80Aa7e2Fda4DA065C55B8061767F729dA1476c7',
+ SUSD: '0xc374eB17f665914c714Ac4cdC8AF3a3474228cc5',
TUSD: '0xa2EA00Df6d8594DBc76b79beFe22db9043b8896F',
+ UNI: ZERO_ADDRESS,
USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802',
USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084',
- SUSD: '0xc374eB17f665914c714Ac4cdC8AF3a3474228cc5',
- LEND: '0xB47F338EC1e3857BB188E63569aeBAB036EE67c6',
- BAT: '0x85B24b3517E3aC7bf72a14516160541A60cFF19d',
- REP: '0xBeb13523503d35F9b3708ca577CdCCAdbFB236bD',
- MKR: '0x2eA9df3bABe04451c9C3B06a2c844587c59d9C37',
- LINK: '0x1a906E71FF9e28d8E01460639EB8CF0a6f0e2486',
- KNC: '0xCe4aA1dE3091033Ba74FA2Ad951f6adc5E5cF361',
WBTC: '0xa0E54Ab6AA5f0bf1D62EC3526436F3c05b3348A0',
- MANA: '0x78b1F763857C8645E46eAdD9540882905ff32Db7',
+ WETH: '0xc778417e063141139fce010982780140aa0cd5ab',
+ YFI: ZERO_ADDRESS,
ZRX: '0x02d7055704EfF050323A2E5ee4ba05DB2A588959',
- SNX: '0xF80Aa7e2Fda4DA065C55B8061767F729dA1476c7',
- BUSD: '0xFA6adcFf6A90c11f31Bc9bb59eC0a6efB38381C6',
},
[EthereumNetwork.main]: {
- WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
+ AAVE: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9',
+ BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef',
+ BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53',
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
+ ENJ: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c',
+ KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200',
+ LINK: '0x514910771af9ca656af840dff83e8264ecf986ca',
+ MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942',
+ MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
+ REN: '0x408e41876cCCDC0F92210600ef50372656052a38',
+ REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862',
+ SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
+ SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51',
TUSD: '0x0000000000085d4780B73119b644AE5ecd22b376',
+ UNI: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984',
USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7',
- SUSD: '0x57ab1ec28d129707052df4df418d58a2d46d5f51',
- LEND: '0x80fB784B7eD66730e8b1DBd9820aFD29931aab03',
- BAT: '0x0d8775f648430679a709e98d2b0cb6250d2887ef',
- REP: '0x1985365e9f78359a9B6AD760e32412f4a445E862',
- MKR: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
- LINK: '0x514910771af9ca656af840dff83e8264ecf986ca',
- KNC: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200',
WBTC: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
- MANA: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942',
+ WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
+ YFI: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e',
ZRX: '0xe41d2489571d322189246dafa5ebde1f4699f498',
- SNX: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
- BUSD: '0x4Fabb145d64652a948d72533023f6E7A623C7C53',
},
},
};
diff --git a/config/commons.ts b/config/commons.ts
index 71c60c66..5030a923 100644
--- a/config/commons.ts
+++ b/config/commons.ts
@@ -1,25 +1,30 @@
import BigNumber from 'bignumber.js';
-import {oneEther, oneRay, RAY} from '../helpers/constants';
+import {zeroPad} from 'ethers/lib/utils';
+import {oneEther, oneRay, RAY, ZERO_ADDRESS} from '../helpers/constants';
import {ICommonConfiguration, EthereumNetwork, eEthereumNetwork} from '../helpers/types';
const MOCK_CHAINLINK_AGGREGATORS_PRICES = {
- DAI: oneEther.multipliedBy('0.00369068412860').toFixed(),
- TUSD: oneEther.multipliedBy('0.00364714136416').toFixed(),
- USDC: oneEther.multipliedBy('0.00367714136416').toFixed(),
- LEND: oneEther.multipliedBy('0.00003620948469').toFixed(),
+ AAVE: oneEther.multipliedBy('0.003620948469').toFixed(),
BAT: oneEther.multipliedBy('0.00137893825230').toFixed(),
- USDT: oneEther.multipliedBy('0.00369068412860').toFixed(),
- SUSD: oneEther.multipliedBy('0.00364714136416').toFixed(),
- MKR: oneEther.multipliedBy('2.508581').toFixed(),
- REP: oneEther.multipliedBy('0.048235').toFixed(),
- ZRX: oneEther.multipliedBy('0.001151').toFixed(),
- WBTC: oneEther.multipliedBy('47.332685').toFixed(),
- LINK: oneEther.multipliedBy('0.009955').toFixed(),
- KNC: oneEther.multipliedBy('0.001072').toFixed(),
- MANA: oneEther.multipliedBy('0.000158').toFixed(),
- SNX: oneEther.multipliedBy('0.00442616').toFixed(),
BUSD: oneEther.multipliedBy('0.00736484').toFixed(),
+ DAI: oneEther.multipliedBy('0.00369068412860').toFixed(),
+ ENJ: oneEther.multipliedBy('0.00029560').toFixed(),
+ KNC: oneEther.multipliedBy('0.001072').toFixed(),
+ LINK: oneEther.multipliedBy('0.009955').toFixed(),
+ MANA: oneEther.multipliedBy('0.000158').toFixed(),
+ MKR: oneEther.multipliedBy('2.508581').toFixed(),
+ REN: oneEther.multipliedBy('0.00065133').toFixed(),
+ REP: oneEther.multipliedBy('0.048235').toFixed(),
+ SNX: oneEther.multipliedBy('0.00442616').toFixed(),
+ SUSD: oneEther.multipliedBy('0.00364714136416').toFixed(),
+ TUSD: oneEther.multipliedBy('0.00364714136416').toFixed(),
+ UNI: oneEther.multipliedBy('0.00536479').toFixed(),
+ USDC: oneEther.multipliedBy('0.00367714136416').toFixed(),
+ USDT: oneEther.multipliedBy('0.00369068412860').toFixed(),
WETH: oneEther.toFixed(),
+ WBTC: oneEther.multipliedBy('47.332685').toFixed(),
+ YFI: oneEther.multipliedBy('22.407436').toFixed(),
+ ZRX: oneEther.multipliedBy('0.001151').toFixed(),
USD: '5848466240000000',
UNI_DAI_ETH: oneEther.multipliedBy('2.1').toFixed(),
UNI_USDC_ETH: oneEther.multipliedBy('2.1').toFixed(),
@@ -35,7 +40,6 @@ const MOCK_CHAINLINK_AGGREGATORS_PRICES = {
export const CommonsConfig: ICommonConfiguration = {
ConfigName: 'Commons',
ProviderId: 0,
- ReserveSymbols: [],
ProtocolGlobalParams: {
OptimalUtilizationRate: new BigNumber(0.8).times(RAY),
ExcessUtilizationRate: new BigNumber(0.2).times(RAY),
@@ -61,6 +65,7 @@ export const CommonsConfig: ICommonConfiguration = {
...MOCK_CHAINLINK_AGGREGATORS_PRICES,
},
},
+ // TODO: reorg alphabetically, checking the reason of tests failing
LendingRateOracleRatesCommon: {
WETH: {
borrowRate: oneRay.multipliedBy(0.03).toFixed(),
@@ -83,7 +88,7 @@ export const CommonsConfig: ICommonConfiguration = {
BAT: {
borrowRate: oneRay.multipliedBy(0.03).toFixed(),
},
- LEND: {
+ AAVE: {
borrowRate: oneRay.multipliedBy(0.03).toFixed(),
},
LINK: {
@@ -110,6 +115,15 @@ export const CommonsConfig: ICommonConfiguration = {
SNX: {
borrowRate: oneRay.multipliedBy(0.03).toFixed(),
},
+ YFI: {
+ borrowRate: oneRay.multipliedBy(0.03).toFixed(),
+ },
+ REN: {
+ borrowRate: oneRay.multipliedBy(0.03).toFixed(),
+ },
+ UNI: {
+ borrowRate: oneRay.multipliedBy(0.03).toFixed(),
+ },
BUSD: {
borrowRate: oneRay.multipliedBy(0.05).toFixed(),
},
@@ -118,38 +132,53 @@ export const CommonsConfig: ICommonConfiguration = {
// COMMON PROTOCOL ADDRESSES ACROSS POOLS
// ----------------
- // If lendingPoolManagerAddress is set, will take priority over lendingPoolManagerAddressIndex
- AaveAdmin: {
+ // If PoolAdmin/emergencyAdmin is set, will take priority over PoolAdminIndex/emergencyAdminIndex
+ PoolAdmin: {
+ [eEthereumNetwork.coverage]: undefined,
+ [eEthereumNetwork.buidlerevm]: undefined,
+ [eEthereumNetwork.coverage]: undefined,
+ [eEthereumNetwork.hardhat]: undefined,
+ [eEthereumNetwork.kovan]: undefined,
+ [eEthereumNetwork.ropsten]: undefined,
+ [eEthereumNetwork.main]: undefined,
+ },
+ PoolAdminIndex: 0,
+ EmergencyAdmin: {
+ [eEthereumNetwork.hardhat]: undefined,
[eEthereumNetwork.coverage]: undefined,
[eEthereumNetwork.buidlerevm]: undefined,
[eEthereumNetwork.kovan]: undefined,
[eEthereumNetwork.ropsten]: undefined,
[eEthereumNetwork.main]: undefined,
},
- AaveAdminIndex: 0,
+ EmergencyAdminIndex: 1,
ProviderRegistry: {
[eEthereumNetwork.kovan]: '',
[eEthereumNetwork.ropsten]: '',
[eEthereumNetwork.main]: '',
[eEthereumNetwork.coverage]: '',
+ [eEthereumNetwork.hardhat]: '',
[eEthereumNetwork.buidlerevm]: '',
},
LendingRateOracle: {
[eEthereumNetwork.coverage]: '',
+ [eEthereumNetwork.hardhat]: '',
[eEthereumNetwork.buidlerevm]: '',
- [eEthereumNetwork.kovan]: '0xdcde9bb6a49e37fa433990832ab541ae2d4feb4a',
+ [eEthereumNetwork.kovan]: '0xdCde9Bb6a49e37fA433990832AB541AE2d4FEB4a',
[eEthereumNetwork.ropsten]: '0x05dcca805a6562c1bdd0423768754acb6993241b',
[eEthereumNetwork.main]: '0x4d728a4496e4de35f218d5a214366bde3a62b51c',
},
TokenDistributor: {
[eEthereumNetwork.coverage]: '',
[eEthereumNetwork.buidlerevm]: '',
+ [eEthereumNetwork.hardhat]: '',
[EthereumNetwork.kovan]: '0x971efe90088f21dc6a36f610ffed77fc19710708',
[EthereumNetwork.ropsten]: '0xeba2ea67942b8250d870b12750b594696d02fc9c',
[EthereumNetwork.main]: '0xe3d9988f676457123c5fd01297605efdd0cba1ae',
},
ChainlinkProxyPriceProvider: {
[eEthereumNetwork.coverage]: '',
+ [eEthereumNetwork.hardhat]: '',
[eEthereumNetwork.buidlerevm]: '',
[EthereumNetwork.kovan]: '0x276C4793F2EE3D5Bf18C5b879529dD4270BA4814',
[EthereumNetwork.ropsten]: '0x657372A559c30d236F011239fF9fbB6D76718271',
@@ -157,6 +186,7 @@ export const CommonsConfig: ICommonConfiguration = {
},
FallbackOracle: {
[eEthereumNetwork.coverage]: '',
+ [eEthereumNetwork.hardhat]: '',
[eEthereumNetwork.buidlerevm]: '',
[EthereumNetwork.kovan]: '0x50913E8E1c650E790F8a1E741FF9B1B1bB251dfe',
[EthereumNetwork.ropsten]: '0xAD1a978cdbb8175b2eaeC47B01404f8AEC5f4F0d',
@@ -164,85 +194,99 @@ export const CommonsConfig: ICommonConfiguration = {
},
ChainlinkAggregator: {
[eEthereumNetwork.coverage]: {},
+ [eEthereumNetwork.hardhat]: {},
[eEthereumNetwork.buidlerevm]: {},
[EthereumNetwork.kovan]: {
- DAI: '0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90',
- TUSD: '0x02424c54D78D48179Fd12ebFfB11c16f9CA984Ad',
- USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5',
- USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3',
- SUSD: '0xa353F8b083F7575cfec443b5ad585D42f652E9F7',
- LEND: '0xdce38940264dfbc01ad1486c21764948e511947e',
- BAT: '0x2c8d01771CCDca47c103194C5860dbEA2fE61626',
- REP: '0x09F4A94F44c29d4967C761bBdB89f5bD3E2c09E6',
- MKR: '0x14D7714eC44F44ECD0098B39e642b246fB2c38D0',
- LINK: '0xf1e71Afd1459C05A2F898502C4025be755aa844A',
- KNC: '0x0893AaF58f62279909F9F6FF2E5642f53342e77F',
- WBTC: '0x33E5085E92f5b53E9A193E28ad2f76bF210550BB',
- MANA: '0x3c30c5c415B2410326297F0f65f5Cbb32f3aefCc',
- ZRX: '0x2636cfdDB457a6C7A7D60A439F1E5a5a0C3d9c65',
- SNX: '0x775E76cca1B5bc903c9a8C6f77416A35E5744664',
- BUSD: '0x63294A05C9a81b1A40CAD3f2ff30617111630393',
- USD: '0xD21912D8762078598283B14cbA40Cb4bFCb87581',
+ AAVE: '0xd04647B7CB523bb9f26730E9B6dE1174db7591Ad',
+ BAT: '0x0e4fcEC26c9f85c3D714370c98f43C4E02Fc35Ae',
+ BUSD: '0xbF7A18ea5DE0501f7559144e702b29c55b055CcB',
+ DAI: '0x22B58f1EbEDfCA50feF632bD73368b2FdA96D541',
+ ENJ: '0xfaDbe2ee798889F02d1d39eDaD98Eff4c7fe95D4',
+ KNC: '0xb8E8130d244CFd13a75D6B9Aee029B1C33c808A7',
+ LINK: '0x3Af8C569ab77af5230596Acf0E8c2F9351d24C38',
+ MANA: '0x1b93D8E109cfeDcBb3Cc74eD761DE286d5771511',
+ MKR: '0x0B156192e04bAD92B6C1C13cf8739d14D78D5701',
+ REN: '0xF1939BECE7708382b5fb5e559f630CB8B39a10ee',
+ REP: '0x3A7e6117F2979EFf81855de32819FBba48a63e9e',
+ SNX: '0xF9A76ae7a1075Fe7d646b06fF05Bd48b9FA5582e',
+ SUSD: '0xb343e7a1aF578FA35632435243D814e7497622f7',
+ TUSD: '0x7aeCF1c19661d12E962b69eBC8f6b2E63a55C660',
+ UNI: '0x17756515f112429471F86f98D5052aCB6C47f6ee',
+ USDC: '0x64EaC61A2DFda2c3Fa04eED49AA33D021AeC8838',
+ USDT: '0x0bF499444525a23E7Bb61997539725cA2e928138',
+ WBTC: '0xF7904a295A029a3aBDFFB6F12755974a958C7C25',
+ YFI: '0xC5d1B1DEb2992738C0273408ac43e1e906086B6C',
+ ZRX: '0xBc3f28Ccc21E9b5856E81E6372aFf57307E2E883',
+ USD: '0x9326BFA02ADD2366b30bacB125260Af641031331',
UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9',
- UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961',
- UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC',
UNI_LEND_ETH: '0xB996b1a11BA0aACc4deA57f7f92d1722428f2E90',
UNI_LINK_ETH: '0x267490eE9Ad21dfE839aE73A8B1c8C9A36F60d33',
UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069',
+ UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC',
+ UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961',
},
[EthereumNetwork.ropsten]: {
+ AAVE: ZERO_ADDRESS,
+ BAT: '0xafd8186c962daf599f171b8600f3e19af7b52c92',
+ BUSD: '0x0A32D96Ff131cd5c3E0E5AAB645BF009Eda61564',
DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b',
+ ENJ: ZERO_ADDRESS,
+ KNC: '0x19d97ceb36624a31d827032d8216dd2eb15e9845',
+ LINK: '0xb8c99b98913bE2ca4899CdcaF33a3e519C20EeEc',
+ MANA: '0xDab909dedB72573c626481fC98CEE1152b81DEC2',
+ MKR: '0x811B1f727F8F4aE899774B568d2e72916D91F392',
+ REN: ZERO_ADDRESS,
+ REP: '0xa949ee9ba80c0f381481f2eab538bc5547a5ac67',
+ SNX: '0xA95674a8Ed9aa9D2E445eb0024a9aa05ab44f6bf',
+ SUSD: '0xe054b4aee7ac7645642dd52f1c892ff0128c98f0',
TUSD: '0x523ac85618df56e940534443125ef16daf785620',
+ UNI: ZERO_ADDRESS,
USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d',
USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288',
- SUSD: '0xe054b4aee7ac7645642dd52f1c892ff0128c98f0',
- LEND: '0xf7b4834fe443d1E04D757b4b089b35F5A90F2847',
- BAT: '0xafd8186c962daf599f171b8600f3e19af7b52c92',
- REP: '0xa949ee9ba80c0f381481f2eab538bc5547a5ac67',
- MKR: '0x811B1f727F8F4aE899774B568d2e72916D91F392',
- LINK: '0xb8c99b98913bE2ca4899CdcaF33a3e519C20EeEc',
- KNC: '0x19d97ceb36624a31d827032d8216dd2eb15e9845',
WBTC: '0x5b8B87A0abA4be247e660B0e0143bB30Cdf566AF',
- MANA: '0xDab909dedB72573c626481fC98CEE1152b81DEC2',
+ YFI: ZERO_ADDRESS,
ZRX: '0x1d0052e4ae5b4ae4563cbac50edc3627ca0460d7',
- SNX: '0xA95674a8Ed9aa9D2E445eb0024a9aa05ab44f6bf',
- BUSD: '0x0A32D96Ff131cd5c3E0E5AAB645BF009Eda61564',
- USD: '0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507',
UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028',
- UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3',
- UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1',
UNI_LEND_ETH: '0x43c44B27376Afedee06Bae2A003e979FC3B3Da6C',
UNI_LINK_ETH: '0xb60c29714146EA3539261f599Eb30f62904108Fa',
UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5',
+ UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1',
+ UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3',
+ USD: '0x8468b2bDCE073A157E560AA4D9CcF6dB1DB98507',
},
[EthereumNetwork.main]: {
+ AAVE: '0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012',
+ BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129',
+ BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888',
DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c',
+ ENJ: '0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B',
+ KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152',
+ LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07',
+ MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97',
+ MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3',
+ REN: '0x3147D7203354Dc06D9fd350c7a2437bcA92387a4',
+ REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c',
+ SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828',
+ SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea',
TUSD: '0x73ead35fd6A572EF763B13Be65a9db96f7643577',
+ UNI: '0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e',
USDC: '0xdE54467873c3BCAA76421061036053e371721708',
USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE',
- SUSD: '0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea',
- LEND: '0x1EeaF25f2ECbcAf204ECADc8Db7B0db9DA845327',
- BAT: '0x9b4e2579895efa2b4765063310Dc4109a7641129',
- REP: '0xb8b513d9cf440C1b6f5C7142120d611C94fC220c',
- MKR: '0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3',
- LINK: '0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07',
- KNC: '0xd0e785973390fF8E77a83961efDb4F271E6B8152',
WBTC: '0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c',
- MANA: '0xc89c4ed8f52Bb17314022f6c0dCB26210C905C97',
+ YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4',
ZRX: '0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8',
- SNX: '0xE23d1142dE4E83C08bb048bcab54d50907390828',
- BUSD: '0x5d4BB541EED49D0290730b4aB332aA46bd27d888',
- USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375',
UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b',
- UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
- UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E',
UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3',
UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c',
+ UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
+ UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
+ USD: '0x59b826c214aBa7125bFA52970d97736c105Cc375',
},
},
ReserveAssets: {
[eEthereumNetwork.coverage]: {},
+ [eEthereumNetwork.hardhat]: {},
[eEthereumNetwork.buidlerevm]: {},
[EthereumNetwork.main]: {},
[EthereumNetwork.kovan]: {},
@@ -252,17 +296,28 @@ export const CommonsConfig: ICommonConfiguration = {
ATokenDomainSeparator: {
[eEthereumNetwork.coverage]:
'0x95b73a72c6ecf4ccbbba5178800023260bad8e75cdccdb8e4827a2977a37c820',
+ [eEthereumNetwork.hardhat]:
+ '0xa14895ab432a9d0712a041fdcea77f7f65826945dc90bf29ea819c2a01e7c5f9',
[eEthereumNetwork.buidlerevm]:
- '0x76cbbf8aa4b11a7c207dd79ccf8c394f59475301598c9a083f8258b4fafcfa86',
+ '0xa14895ab432a9d0712a041fdcea77f7f65826945dc90bf29ea819c2a01e7c5f9',
[eEthereumNetwork.kovan]: '',
[eEthereumNetwork.ropsten]: '',
[eEthereumNetwork.main]: '',
},
ProxyPriceProvider: {
[eEthereumNetwork.coverage]: '',
+ [eEthereumNetwork.hardhat]: '',
[eEthereumNetwork.buidlerevm]: '',
- [eEthereumNetwork.kovan]: '0x276C4793F2EE3D5Bf18C5b879529dD4270BA4814',
+ [eEthereumNetwork.kovan]: '0xB8bE51E6563BB312Cbb2aa26e352516c25c26ac1',
[eEthereumNetwork.ropsten]: '',
[eEthereumNetwork.main]: '',
},
+ WETH: {
+ [eEthereumNetwork.coverage]: '', // deployed in local evm
+ [eEthereumNetwork.hardhat]: '', // deployed in local evm
+ [eEthereumNetwork.buidlerevm]: '', // deployed in local evm
+ [eEthereumNetwork.kovan]: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
+ [eEthereumNetwork.ropsten]: '0xc778417e063141139fce010982780140aa0cd5ab',
+ [eEthereumNetwork.main]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
+ },
};
diff --git a/config/reservesConfigs.ts b/config/reservesConfigs.ts
new file mode 100644
index 00000000..59369d38
--- /dev/null
+++ b/config/reservesConfigs.ts
@@ -0,0 +1,214 @@
+import BigNumber from 'bignumber.js';
+import {oneRay} from '../helpers/constants';
+import {IReserveParams} from '../helpers/types';
+
+export const strategyBase: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '6000',
+ liquidationThreshold: '6500',
+ liquidationBonus: '11000',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '18',
+};
+
+export const stablecoinStrategyBase: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '7500',
+ liquidationThreshold: '8000',
+ liquidationBonus: '10500',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '18',
+};
+
+export const stablecoinStrategyCentralized: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.06).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '7500',
+ liquidationThreshold: '8000',
+ liquidationBonus: '10500',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '6',
+};
+
+export const strategyGovernanceTokens: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '4000',
+ liquidationBonus: '11500',
+};
+
+export const stablecoinStrategyBUSD: IReserveParams = {
+ ...stablecoinStrategyCentralized,
+ reserveDecimals: '18',
+ baseLTVAsCollateral: '-1',
+ liquidationThreshold: '0',
+ liquidationBonus: '0',
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableBorrowRateEnabled: false,
+ stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+};
+
+export const strategyAAVE: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '5000',
+ liquidationThreshold: '6500',
+ liquidationBonus: '11000',
+ borrowingEnabled: false,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+};
+
+export const stablecoinStrategyDAI: IReserveParams = {
+ ...stablecoinStrategyBase,
+};
+
+export const strategyENJ: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '5500',
+ stableBorrowRateEnabled: false,
+};
+
+export const strategyKNC: IReserveParams = {
+ ...strategyBase,
+ variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
+};
+
+export const strategyLINK: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '6500',
+ liquidationThreshold: '7000',
+};
+
+export const strategyMANA: IReserveParams = {
+ ...strategyBase,
+ variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+};
+
+export const strategyMKR: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '3500',
+};
+
+export const strategyREN: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '5000',
+ liquidationThreshold: '6500',
+ liquidationBonus: '11000',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: false,
+};
+
+export const strategyREP: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '3500',
+ variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
+ borrowingEnabled: true,
+};
+
+export const stablecoinStrategySUSD: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '-1',
+ liquidationThreshold: '0',
+ liquidationBonus: '0',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+};
+
+export const strategySNX: IReserveParams = {
+ ...strategyBase,
+ baseLTVAsCollateral: '1500',
+ liquidationThreshold: '4000',
+ baseVariableBorrowRate: new BigNumber(0.03).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.12).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
+ stableBorrowRateEnabled: false,
+};
+
+export const stablecoinStrategyTUSD: IReserveParams = {
+ ...stablecoinStrategyCentralized,
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.14).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+};
+
+export const strategyUNI: IReserveParams = {
+ ...strategyGovernanceTokens,
+ stableBorrowRateEnabled: false,
+};
+
+export const stablecoinStrategyUSDC: IReserveParams = {
+ ...stablecoinStrategyBase,
+ variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ reserveDecimals: '6',
+};
+
+export const stablecoinStrategyUSDT: IReserveParams = {
+ ...stablecoinStrategyBase,
+ baseLTVAsCollateral: '-1',
+ liquidationThreshold: '7000',
+ liquidationBonus: '0',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '6',
+};
+
+export const strategyWBTC: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '6000',
+ liquidationThreshold: '6500',
+ liquidationBonus: '11500',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '8',
+};
+
+export const strategyWETH: IReserveParams = {
+ baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '7500',
+ liquidationThreshold: '8000',
+ liquidationBonus: '10500',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: true,
+ reserveDecimals: '18',
+};
+
+export const strategyYFI: IReserveParams = {
+ ...strategyGovernanceTokens,
+};
diff --git a/config/uniswap.ts b/config/uniswap.ts
index 289b4c0b..84a9612f 100644
--- a/config/uniswap.ts
+++ b/config/uniswap.ts
@@ -12,32 +12,7 @@ export const UniswapConfig: IUniswapConfiguration = {
...CommonsConfig,
ConfigName: 'Uniswap',
ProviderId: 2,
- ReserveSymbols: [
- 'WETH',
- 'DAI',
- 'USDC',
- 'USDT',
- 'UNI_DAI_ETH',
- 'UNI_USDC_ETH',
- 'UNI_SETH_ETH',
- 'UNI_LINK_ETH',
- 'UNI_MKR_ETH',
- 'UNI_LEND_ETH',
- ],
ReservesConfig: {
- WETH: {
- baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '-1',
- liquidationThreshold: '8000',
- liquidationBonus: '10500',
- borrowingEnabled: true,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
DAI: {
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
@@ -77,6 +52,19 @@ export const UniswapConfig: IUniswapConfiguration = {
stableBorrowRateEnabled: false,
reserveDecimals: '6',
},
+ WETH: {
+ baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.1).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '-1',
+ liquidationThreshold: '8000',
+ liquidationBonus: '10500',
+ borrowingEnabled: true,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+ },
UNI_DAI_ETH: {
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
@@ -90,32 +78,6 @@ export const UniswapConfig: IUniswapConfiguration = {
stableBorrowRateEnabled: false,
reserveDecimals: '18',
},
- UNI_USDC_ETH: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '6800',
- liquidationThreshold: '7300',
- liquidationBonus: '11000',
- borrowingEnabled: false,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
- UNI_SETH_ETH: {
- baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
- variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
- variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
- stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
- stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
- baseLTVAsCollateral: '4800',
- liquidationThreshold: '6600',
- liquidationBonus: '11000',
- borrowingEnabled: false,
- stableBorrowRateEnabled: false,
- reserveDecimals: '18',
- },
UNI_LEND_ETH: {
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
@@ -155,82 +117,110 @@ export const UniswapConfig: IUniswapConfiguration = {
stableBorrowRateEnabled: false,
reserveDecimals: '18',
},
+ UNI_SETH_ETH: {
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '4800',
+ liquidationThreshold: '6600',
+ liquidationBonus: '11000',
+ borrowingEnabled: false,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+ },
+ UNI_USDC_ETH: {
+ baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
+ variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
+ variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
+ stableRateSlope1: new BigNumber(0.16).multipliedBy(oneRay).toFixed(),
+ stableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
+ baseLTVAsCollateral: '6800',
+ liquidationThreshold: '7300',
+ liquidationBonus: '11000',
+ borrowingEnabled: false,
+ stableBorrowRateEnabled: false,
+ reserveDecimals: '18',
+ },
},
ChainlinkAggregator: {
[eEthereumNetwork.buidlerevm]: {},
+ [eEthereumNetwork.hardhat]: {},
[eEthereumNetwork.coverage]: {},
[EthereumNetwork.kovan]: {
DAI: '0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90',
USDC: '0x672c1C0d1130912D83664011E7960a42E8cA05D5',
USDT: '0xCC833A6522721B3252e7578c5BCAF65738B75Fc3',
UNI_DAI_ETH: '0x0338C40020Bf886c11406115fD1ba205Ef1D9Ff9',
- UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961',
- UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC',
UNI_LEND_ETH: '0xB996b1a11BA0aACc4deA57f7f92d1722428f2E90',
UNI_LINK_ETH: '0x267490eE9Ad21dfE839aE73A8B1c8C9A36F60d33',
UNI_MKR_ETH: '0x6eBF25AB0A18B8F6243619f1AE6b94373169A069',
+ UNI_SETH_ETH: '0xc5F1eA001c1570783b3af418fa775237Eb129EDC',
+ UNI_USDC_ETH: '0x7f5E5D34591e9a70D187BBA94260C30B92aC0961',
},
[EthereumNetwork.ropsten]: {
DAI: '0x64b8e49baded7bfb2fd5a9235b2440c0ee02971b',
USDC: '0xe1480303dde539e2c241bdc527649f37c9cbef7d',
USDT: '0xc08fe0c4d97ccda6b40649c6da621761b628c288',
UNI_DAI_ETH: '0x16048819e3f77b7112eB033624A0bA9d33743028',
- UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3',
- UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1',
UNI_LEND_ETH: '0x43c44B27376Afedee06Bae2A003e979FC3B3Da6C',
UNI_LINK_ETH: '0xb60c29714146EA3539261f599Eb30f62904108Fa',
UNI_MKR_ETH: '0x594ae5421f378b8B4AF9e758C461d2A1FF990BC5',
+ UNI_SETH_ETH: '0x23Ee5188806BD2D31103368B0EA0259bc6706Af1',
+ UNI_USDC_ETH: '0x6952A2678D574073DB97963886c2F38CD09C8Ba3',
},
[EthereumNetwork.main]: {
DAI: '0x037E8F2125bF532F3e228991e051c8A7253B642c',
USDC: '0xdE54467873c3BCAA76421061036053e371721708',
USDT: '0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE',
UNI_DAI_ETH: '0x1bAB293850289Bf161C5DA79ff3d1F02A950555b',
- UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
- UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
UNI_LEND_ETH: '0xF4C8Db2d999b024bBB6c6022566503eD41f2AC1E',
UNI_LINK_ETH: '0xE2A639Beb647d7F709ca805ABa760bBEfdbE37e3',
UNI_MKR_ETH: '0xEe40a5E8F3732bE6ECDb5A90e23D0b7bF0D4a73c',
+ UNI_SETH_ETH: '0x517D40E49660c7705b2e99eEFA6d7B0E9Ba5BF10',
+ UNI_USDC_ETH: '0x444315Ee92F2bb3579293C17B07194227fA99bF0',
},
},
ReserveAssets: {
+ [eEthereumNetwork.hardhat]: {},
[eEthereumNetwork.buidlerevm]: {},
[eEthereumNetwork.coverage]: {},
[EthereumNetwork.kovan]: {
- WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
DAI: '0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD',
USDC: '0xe22da380ee6B445bb8273C81944ADEB6E8450422',
USDT: '0x13512979ADE267AB5100878E2e0f485B568328a4',
+ WETH: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
UNI_DAI_ETH: '0x2e0086b5343101203ADeE40160ca1BD91E29fF75',
- UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D',
- UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe',
UNI_LEND_ETH: '0x7615cd666F867406C64E558B9CCC3883e7EC9BA8',
UNI_LINK_ETH: '0xFb9AAc184e79025f936E9C4EF3047Ad4889Df4a8',
UNI_MKR_ETH: '0xB31a1c30f38cD68e8177566Ef950d7bc3C81DaCF',
+ UNI_SETH_ETH: '0xCF457d8Bb8D8f54Af1ea1B3710231e89bd6CFbfe',
+ UNI_USDC_ETH: '0x34eA1aB2a43ee696914fc3C0d3e517fA666B9e8D',
},
[EthereumNetwork.ropsten]: {
- WETH: '0xc778417e063141139fce010982780140aa0cd5ab',
DAI: '0xf80A32A835F79D7787E8a8ee5721D0fEaFd78108',
USDC: '0x851dEf71f0e6A903375C1e536Bd9ff1684BAD802',
USDT: '0xB404c51BBC10dcBE948077F18a4B8E553D160084',
+ WETH: '0xc778417e063141139fce010982780140aa0cd5ab',
UNI_DAI_ETH: '0xC245A7d35E652Cae438A1FdB13E474DF53DBB81D',
- UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2',
- UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5',
UNI_LEND_ETH: '0xcD5DE1EDD40aBBD6efE2C306276FF56f81Bc3151',
UNI_LINK_ETH: '0x8dcf3c8d4d69ca7C188c0A4cf219A1dcE1e510d7',
UNI_MKR_ETH: '0xd8b7B99a9205FD0D0abFB6D7a2c13Db2681bff43',
+ UNI_SETH_ETH: '0xed4597DCd234867d7A260AD24bAb8253F64940a5',
+ UNI_USDC_ETH: '0x2BD65323955D08eb600074291305881d1295c4D2',
},
[EthereumNetwork.main]: {
- WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
USDC: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+ WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
UNI_DAI_ETH: '0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667',
- UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126',
- UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244',
UNI_LEND_ETH: '0xcaa7e4656f6a2b59f5f99c745f91ab26d1210dce',
UNI_LINK_ETH: '0xf173214c720f58e03e194085b1db28b50acdeead',
UNI_MKR_ETH: '0x2c4bd064b998838076fa341a83d007fc2fa50957',
+ UNI_SETH_ETH: '0xe9cf7887b93150d4f2da7dfc6d502b216438f244',
+ UNI_USDC_ETH: '0x97dec872013f6b5fb443861090ad931542878126',
},
},
};
diff --git a/contracts/configuration/LendingPoolAddressesProvider.sol b/contracts/configuration/LendingPoolAddressesProvider.sol
index 38aa1280..43796d36 100644
--- a/contracts/configuration/LendingPoolAddressesProvider.sol
+++ b/contracts/configuration/LendingPoolAddressesProvider.sol
@@ -2,9 +2,10 @@
pragma solidity ^0.6.8;
import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
-import {
- InitializableImmutableAdminUpgradeabilityProxy
-} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';
+
+// Prettier ignore to prevent buidler flatter bug
+// prettier-ignore
+import {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';
import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
@@ -20,30 +21,37 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
bytes32 private constant LENDING_POOL = 'LENDING_POOL';
bytes32 private constant LENDING_POOL_CONFIGURATOR = 'LENDING_POOL_CONFIGURATOR';
- bytes32 private constant AAVE_ADMIN = 'AAVE_ADMIN';
+ bytes32 private constant POOL_ADMIN = 'POOL_ADMIN';
+ bytes32 private constant EMERGENCY_ADMIN = 'EMERGENCY_ADMIN';
bytes32 private constant LENDING_POOL_COLLATERAL_MANAGER = 'COLLATERAL_MANAGER';
bytes32 private constant PRICE_ORACLE = 'PRICE_ORACLE';
bytes32 private constant LENDING_RATE_ORACLE = 'LENDING_RATE_ORACLE';
/**
- * @dev Sets an address for an id, allowing to cover it or not with a proxy
+ * @dev Sets an address for an id by updating a proxy implementation
* @param id The id
- * @param newAddress The address to set, pass address(0) if a proxy is needed
* @param implementationAddress The address of the implementation if we want it covered by a proxy
* address(0) if we don't want a proxy covering
*/
- function setAddress(
+ function setAddressAsProxy(
bytes32 id,
- address newAddress,
address implementationAddress
) external override onlyOwner {
- if (implementationAddress != address(0)) {
- _updateImpl(id, implementationAddress);
- emit AddressSet(id, implementationAddress, true);
- } else {
- _addresses[id] = newAddress;
- emit AddressSet(id, newAddress, false);
- }
+ _updateImpl(id, implementationAddress);
+ emit AddressSet(id, implementationAddress, true);
+ }
+
+ /**
+ * @dev Sets an address for an id replacing the address saved in the addresses map
+ * @param id The id
+ * @param newAddress The address to set, pass address(0) if a proxy is needed
+ */
+ function setAddress(
+ bytes32 id,
+ address newAddress
+ ) external override onlyOwner {
+ _addresses[id] = newAddress;
+ emit AddressSet(id, newAddress, false);
}
/**
@@ -113,13 +121,22 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
* hence the upgradable proxy pattern is not used
**/
- function getAaveAdmin() external override view returns (address) {
- return getAddress(AAVE_ADMIN);
+ function getPoolAdmin() external override view returns (address) {
+ return getAddress(POOL_ADMIN);
}
- function setAaveAdmin(address aaveAdmin) external override onlyOwner {
- _addresses[AAVE_ADMIN] = aaveAdmin;
- emit AaveAdminUpdated(aaveAdmin);
+ function setPoolAdmin(address admin) external override onlyOwner {
+ _addresses[POOL_ADMIN] = admin;
+ emit ConfigurationAdminUpdated(admin);
+ }
+
+ function getEmergencyAdmin() external override view returns (address) {
+ return getAddress(EMERGENCY_ADMIN);
+ }
+
+ function setEmergencyAdmin(address emergencyAdmin) external override onlyOwner {
+ _addresses[EMERGENCY_ADMIN] = emergencyAdmin;
+ emit EmergencyAdminUpdated(emergencyAdmin);
}
function getPriceOracle() external override view returns (address) {
diff --git a/contracts/deployments/ATokensAndRatesHelper.sol b/contracts/deployments/ATokensAndRatesHelper.sol
index f39cdaa2..a44d5071 100644
--- a/contracts/deployments/ATokensAndRatesHelper.sol
+++ b/contracts/deployments/ATokensAndRatesHelper.sol
@@ -36,7 +36,6 @@ contract ATokensAndRatesHelper is Ownable {
) external onlyOwner {
require(tokens.length == symbols.length, 't Arrays not same length');
require(rates.length == symbols.length, 'r Arrays not same length');
-
for (uint256 i = 0; i < tokens.length; i++) {
emit deployedContracts(
address(
diff --git a/contracts/interfaces/ILendingPool.sol b/contracts/interfaces/ILendingPool.sol
index c6da3c32..17be5799 100644
--- a/contracts/interfaces/ILendingPool.sol
+++ b/contracts/interfaces/ILendingPool.sol
@@ -4,6 +4,7 @@ pragma solidity ^0.6.8;
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
+import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';
pragma experimental ABIEncoderV2;
@@ -32,13 +33,6 @@ interface ILendingPool {
**/
event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);
- event BorrowAllowanceDelegated(
- address indexed fromUser,
- address indexed toUser,
- address[] assets,
- uint256[] interestRateModes,
- uint256[] amounts
- );
/**
* @dev emitted on borrow
* @param reserve the address of the reserve
@@ -195,27 +189,6 @@ interface ILendingPool {
address to
) external;
- /**
- * @dev Sets allowance to borrow on a certain type of debt assets for a certain user address
- * @param assets The underlying asset of each debt token
- * @param user The user to give allowance to
- * @param interestRateModes Types of debt: 1 for stable, 2 for variable
- * @param amounts Allowance amounts to borrow
- **/
- function delegateBorrowAllowance(
- address[] calldata assets,
- address user,
- uint256[] calldata interestRateModes,
- uint256[] calldata amounts
- ) external;
-
- function getBorrowAllowance(
- address fromUser,
- address toUser,
- address asset,
- uint256 interestRateMode
- ) external view returns (uint256);
-
/**
* @dev Allows users to borrow a specific amount of the reserve currency, provided that the borrower
* already deposited enough collateral.
@@ -368,6 +341,8 @@ interface ILendingPool {
function getReservesList() external view returns (address[] memory);
+ function getAddressesProvider() external view returns (ILendingPoolAddressesProvider);
+
/**
* @dev Set the _pause state
* @param val the boolean value to set the current pause state of LendingPool
diff --git a/contracts/interfaces/ILendingPoolAddressesProvider.sol b/contracts/interfaces/ILendingPoolAddressesProvider.sol
index 53ed9873..c1a7ab78 100644
--- a/contracts/interfaces/ILendingPoolAddressesProvider.sol
+++ b/contracts/interfaces/ILendingPoolAddressesProvider.sol
@@ -8,7 +8,8 @@ pragma solidity ^0.6.8;
interface ILendingPoolAddressesProvider {
event LendingPoolUpdated(address indexed newAddress);
- event AaveAdminUpdated(address indexed newAddress);
+ event ConfigurationAdminUpdated(address indexed newAddress);
+ event EmergencyAdminUpdated(address indexed newAddress);
event LendingPoolConfiguratorUpdated(address indexed newAddress);
event LendingPoolCollateralManagerUpdated(address indexed newAddress);
event EthereumAddressUpdated(address indexed newAddress);
@@ -19,7 +20,11 @@ interface ILendingPoolAddressesProvider {
function setAddress(
bytes32 id,
- address newAddress,
+ address newAddress
+ ) external;
+
+ function setAddressAsProxy(
+ bytes32 id,
address impl
) external;
@@ -37,9 +42,13 @@ interface ILendingPoolAddressesProvider {
function setLendingPoolCollateralManager(address manager) external;
- function getAaveAdmin() external view returns (address);
+ function getPoolAdmin() external view returns (address);
- function setAaveAdmin(address aaveAdmin) external;
+ function setPoolAdmin(address admin) external;
+
+ function getEmergencyAdmin() external view returns (address);
+
+ function setEmergencyAdmin(address admin) external;
function getPriceOracle() external view returns (address);
diff --git a/contracts/lendingpool/LendingPool.sol b/contracts/lendingpool/LendingPool.sol
index 23bf3e94..ebeecab9 100644
--- a/contracts/lendingpool/LendingPool.sol
+++ b/contracts/lendingpool/LendingPool.sol
@@ -25,7 +25,7 @@ import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';
import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
import {LendingPoolStorage} from './LendingPoolStorage.sol';
-import {IReserveInterestRateStrategy} from '../interfaces/IReserveInterestRateStrategy.sol';
+import {Address} from '../dependencies/openzeppelin/contracts/Address.sol';
/**
* @title LendingPool contract
@@ -39,13 +39,27 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
using SafeERC20 for IERC20;
//main configuration parameters
- uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 4000;
- uint256 public constant REBALANCE_UP_USAGE_RATIO_THRESHOLD = 0.95 * 1e27; //usage ratio of 95%
uint256 public constant MAX_STABLE_RATE_BORROW_SIZE_PERCENT = 2500;
uint256 public constant FLASHLOAN_PREMIUM_TOTAL = 9;
uint256 public constant MAX_NUMBER_RESERVES = 128;
uint256 public constant LENDINGPOOL_REVISION = 0x2;
+ /**
+ * @dev functions marked by this modifier can only be called when the protocol is not paused
+ **/
+ modifier whenNotPaused() {
+ _whenNotPaused();
+ _;
+ }
+
+ /**
+ * @dev functions marked by this modifier can only be called by the LendingPoolConfigurator
+ **/
+ modifier onlyLendingPoolConfigurator() {
+ _onlyLendingPoolConfigurator();
+ _;
+ }
+
/**
* @dev only lending pools configurator can use functions affected by this modifier
**/
@@ -92,8 +106,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 amount,
address onBehalfOf,
uint16 referralCode
- ) external override {
- _whenNotPaused();
+ ) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
ValidationLogic.validateDeposit(reserve, amount);
@@ -107,6 +120,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
if (isFirstDeposit) {
_usersConfig[onBehalfOf].setUsingAsCollateral(reserve.id, true);
+ emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);
}
//transfer to the aToken contract
@@ -125,8 +139,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address asset,
uint256 amount,
address to
- ) external override {
- _whenNotPaused();
+ ) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
address aToken = reserve.aTokenAddress;
@@ -157,6 +170,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
if (amountToWithdraw == userBalance) {
_usersConfig[msg.sender].setUsingAsCollateral(reserve.id, false);
+ emit ReserveUsedAsCollateralDisabled(asset, msg.sender);
}
IAToken(aToken).burn(msg.sender, to, amountToWithdraw, reserve.liquidityIndex);
@@ -164,53 +178,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
emit Withdraw(asset, msg.sender, to, amountToWithdraw);
}
- /**
- * @dev returns the borrow allowance of the user
- * @param asset The underlying asset of the debt token
- * @param fromUser The user to giving allowance
- * @param toUser The user to give allowance to
- * @param interestRateMode Type of debt: 1 for stable, 2 for variable
- * @return the current allowance of toUser
- **/
- function getBorrowAllowance(
- address fromUser,
- address toUser,
- address asset,
- uint256 interestRateMode
- ) external override view returns (uint256) {
- return
- _borrowAllowance[_reserves[asset].getDebtTokenAddress(interestRateMode)][fromUser][toUser];
- }
-
- /**
- * @dev Sets allowance to borrow on a certain type of debt assets for a certain user address
- * @param assets The underlying asset of each debt token
- * @param user The user to give allowance to
- * @param interestRateModes Types of debt: 1 for stable, 2 for variable
- * @param amounts Allowance amounts to borrow
- **/
- function delegateBorrowAllowance(
- address[] calldata assets,
- address user,
- uint256[] calldata interestRateModes,
- uint256[] calldata amounts
- ) external override {
- _whenNotPaused();
-
- uint256 countAssets = assets.length;
- require(
- countAssets == interestRateModes.length && countAssets == amounts.length,
- Errors.LP_INCONSISTENT_PARAMS_LENGTH
- );
-
- for (uint256 i = 0; i < countAssets; i++) {
- address debtToken = _reserves[assets[i]].getDebtTokenAddress(interestRateModes[i]);
- _borrowAllowance[debtToken][msg.sender][user] = amounts[i];
- }
-
- emit BorrowAllowanceDelegated(msg.sender, user, assets, interestRateModes, amounts);
- }
-
/**
* @dev Allows users to borrow a specific amount of the reserve currency, provided that the borrower
* already deposited enough collateral.
@@ -226,19 +193,9 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 interestRateMode,
uint16 referralCode,
address onBehalfOf
- ) external override {
- _whenNotPaused();
+ ) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
- if (onBehalfOf != msg.sender) {
- address debtToken = reserve.getDebtTokenAddress(interestRateMode);
-
- _borrowAllowance[debtToken][onBehalfOf][msg
- .sender] = _borrowAllowance[debtToken][onBehalfOf][msg.sender].sub(
- amount,
- Errors.LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH
- );
- }
_executeBorrow(
ExecuteBorrowParams(
asset,
@@ -266,9 +223,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 amount,
uint256 rateMode,
address onBehalfOf
- ) external override {
- _whenNotPaused();
-
+ ) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
(uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(onBehalfOf, reserve);
@@ -323,8 +278,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
* @param asset the address of the reserve on which the user borrowed
* @param rateMode the rate mode that the user wants to swap
**/
- function swapBorrowRateMode(address asset, uint256 rateMode) external override {
- _whenNotPaused();
+ function swapBorrowRateMode(address asset, uint256 rateMode) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
(uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(msg.sender, reserve);
@@ -345,6 +299,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
//burn stable rate tokens, mint variable rate tokens
IStableDebtToken(reserve.stableDebtTokenAddress).burn(msg.sender, stableDebt);
IVariableDebtToken(reserve.variableDebtTokenAddress).mint(
+ msg.sender,
msg.sender,
stableDebt,
reserve.variableBorrowIndex
@@ -357,6 +312,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.variableBorrowIndex
);
IStableDebtToken(reserve.stableDebtTokenAddress).mint(
+ msg.sender,
msg.sender,
variableDebt,
reserve.currentStableBorrowRate
@@ -376,50 +332,30 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
* @param asset the address of the reserve
* @param user the address of the user to be rebalanced
**/
- function rebalanceStableBorrowRate(address asset, address user) external override {
- _whenNotPaused();
-
+ function rebalanceStableBorrowRate(address asset, address user) external override whenNotPaused {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
IERC20 stableDebtToken = IERC20(reserve.stableDebtTokenAddress);
IERC20 variableDebtToken = IERC20(reserve.variableDebtTokenAddress);
address aTokenAddress = reserve.aTokenAddress;
- uint256 stableBorrowBalance = IERC20(stableDebtToken).balanceOf(user);
+ uint256 stableDebt = IERC20(stableDebtToken).balanceOf(user);
- //if the usage ratio is below 95%, no rebalances are needed
- uint256 totalBorrows = stableDebtToken
- .totalSupply()
- .add(variableDebtToken.totalSupply())
- .wadToRay();
- uint256 availableLiquidity = IERC20(asset).balanceOf(aTokenAddress).wadToRay();
- uint256 usageRatio = totalBorrows == 0
- ? 0
- : totalBorrows.rayDiv(availableLiquidity.add(totalBorrows));
-
- //if the liquidity rate is below REBALANCE_UP_THRESHOLD of the max variable APR at 95% usage,
- //then we allow rebalancing of the stable rate positions.
-
- uint256 currentLiquidityRate = reserve.currentLiquidityRate;
- uint256 maxVariableBorrowRate = IReserveInterestRateStrategy(
- reserve
- .interestRateStrategyAddress
- )
- .getMaxVariableBorrowRate();
-
- require(
- usageRatio >= REBALANCE_UP_USAGE_RATIO_THRESHOLD &&
- currentLiquidityRate <=
- maxVariableBorrowRate.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),
- Errors.LP_INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET
+ ValidationLogic.validateRebalanceStableBorrowRate(
+ reserve,
+ asset,
+ stableDebtToken,
+ variableDebtToken,
+ aTokenAddress
);
reserve.updateState();
- IStableDebtToken(address(stableDebtToken)).burn(user, stableBorrowBalance);
+ IStableDebtToken(address(stableDebtToken)).burn(user, stableDebt);
IStableDebtToken(address(stableDebtToken)).mint(
user,
- stableBorrowBalance,
+ user,
+ stableDebt,
reserve.currentStableBorrowRate
);
@@ -433,13 +369,17 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
* @param asset the address of the reserve
* @param useAsCollateral true if the user wants to use the deposit as collateral, false otherwise.
**/
- function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external override {
- _whenNotPaused();
+ function setUserUseReserveAsCollateral(address asset, bool useAsCollateral)
+ external
+ override
+ whenNotPaused
+ {
ReserveLogic.ReserveData storage reserve = _reserves[asset];
ValidationLogic.validateSetUseReserveAsCollateral(
reserve,
asset,
+ useAsCollateral,
_reserves,
_usersConfig[msg.sender],
_reservesList,
@@ -471,8 +411,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address user,
uint256 purchaseAmount,
bool receiveAToken
- ) external override {
- _whenNotPaused();
+ ) external override whenNotPaused {
address collateralManager = _addressesProvider.getLendingPoolCollateralManager();
//solium-disable-next-line
@@ -490,10 +429,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
(uint256 returnCode, string memory returnMessage) = abi.decode(result, (uint256, string));
- if (returnCode != 0) {
- //error found
- revert(string(abi.encodePacked(returnMessage)));
- }
+ require(returnCode == 0, string(abi.encodePacked(returnMessage)));
}
struct FlashLoanLocalVars {
@@ -528,9 +464,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address onBehalfOf,
bytes calldata params,
uint16 referralCode
- ) external override {
- _whenNotPaused();
-
+ ) external override whenNotPaused {
FlashLoanLocalVars memory vars;
ValidationLogic.validateFlashloan(assets, amounts);
@@ -581,14 +515,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
vars.currentAmountPlusPremium
);
} else {
- if (msg.sender != onBehalfOf) {
- vars.debtToken = _reserves[vars.currentAsset].getDebtTokenAddress(modes[vars.i]);
-
- _borrowAllowance[vars.debtToken][onBehalfOf][msg.sender] = _borrowAllowance[vars
- .debtToken][onBehalfOf][msg.sender]
- .sub(vars.currentAmount, Errors.LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH);
- }
-
//if the user didn't choose to return the funds, the system checks if there
//is enough collateral and eventually open a position
_executeBorrow(
@@ -753,7 +679,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
/**
* @dev returns the addresses provider
**/
- function getAddressesProvider() external view returns (ILendingPoolAddressesProvider) {
+ function getAddressesProvider() external override view returns (ILendingPoolAddressesProvider) {
return _addressesProvider;
}
@@ -773,9 +699,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 amount,
uint256 balanceFromBefore,
uint256 balanceToBefore
- ) external override {
- _whenNotPaused();
-
+ ) external override whenNotPaused {
require(msg.sender == _reserves[asset].aTokenAddress, Errors.LP_CALLER_MUST_BE_AN_ATOKEN);
ValidationLogic.validateTransfer(
@@ -793,22 +717,17 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
if (balanceFromBefore.sub(amount) == 0) {
UserConfiguration.Map storage fromConfig = _usersConfig[from];
fromConfig.setUsingAsCollateral(reserveId, false);
+ emit ReserveUsedAsCollateralDisabled(asset, from);
}
if (balanceToBefore == 0 && amount != 0) {
UserConfiguration.Map storage toConfig = _usersConfig[to];
toConfig.setUsingAsCollateral(reserveId, true);
+ emit ReserveUsedAsCollateralEnabled(asset, to);
}
}
}
- /**
- * @dev avoids direct transfers of ETH
- **/
- receive() external payable {
- revert();
- }
-
/**
* @dev initializes a reserve
* @param asset the address of the reserve
@@ -821,8 +740,8 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address stableDebtAddress,
address variableDebtAddress,
address interestRateStrategyAddress
- ) external override {
- _onlyLendingPoolConfigurator();
+ ) external override onlyLendingPoolConfigurator {
+ require(Address.isContract(asset), Errors.LP_NOT_CONTRACT);
_reserves[asset].init(
aTokenAddress,
stableDebtAddress,
@@ -840,8 +759,8 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress)
external
override
+ onlyLendingPoolConfigurator
{
- _onlyLendingPoolConfigurator();
_reserves[asset].interestRateStrategyAddress = rateStrategyAddress;
}
@@ -850,8 +769,11 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
* @param asset the address of the reserve
* @param configuration the configuration map
**/
- function setConfiguration(address asset, uint256 configuration) external override {
- _onlyLendingPoolConfigurator();
+ function setConfiguration(address asset, uint256 configuration)
+ external
+ override
+ onlyLendingPoolConfigurator
+ {
_reserves[asset].configuration.data = configuration;
}
@@ -859,9 +781,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
* @dev Set the _pause state
* @param val the boolean value to set the current pause state of LendingPool
*/
- function setPause(bool val) external override {
- _onlyLendingPoolConfigurator();
-
+ function setPause(bool val) external override onlyLendingPoolConfigurator {
_paused = val;
if (_paused) {
emit Paused();
@@ -923,12 +843,14 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
currentStableRate = reserve.currentStableBorrowRate;
isFirstBorrowing = IStableDebtToken(reserve.stableDebtTokenAddress).mint(
+ vars.user,
vars.onBehalfOf,
vars.amount,
currentStableRate
);
} else {
isFirstBorrowing = IVariableDebtToken(reserve.variableDebtTokenAddress).mint(
+ vars.user,
vars.onBehalfOf,
vars.amount,
reserve.variableBorrowIndex
@@ -977,7 +899,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
_reserves[asset].id = uint8(reservesCount);
_reservesList[reservesCount] = asset;
- _reservesCount++;
+ _reservesCount = reservesCount + 1;
}
}
}
diff --git a/contracts/lendingpool/LendingPoolCollateralManager.sol b/contracts/lendingpool/LendingPoolCollateralManager.sol
index 993f7fe5..729895de 100644
--- a/contracts/lendingpool/LendingPoolCollateralManager.sol
+++ b/contracts/lendingpool/LendingPoolCollateralManager.sol
@@ -57,6 +57,13 @@ contract LendingPoolCollateralManager is VersionedInitializable, LendingPoolStor
bool receiveAToken
);
+ /**
+ * @dev emitted when a user disables a reserve as collateral
+ * @param reserve the address of the reserve
+ * @param user the address of the user
+ **/
+ event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
+
struct LiquidationCallLocalVars {
uint256 userCollateralBalance;
uint256 userStableDebt;
@@ -120,7 +127,7 @@ contract LendingPoolCollateralManager is VersionedInitializable, LendingPoolStor
(, , , , vars.healthFactor) = GenericLogic.calculateUserAccountData(
user,
_reserves,
- _usersConfig[user],
+ userConfig,
_reservesList,
_reservesCount,
_addressesProvider.getPriceOracle()
@@ -246,6 +253,14 @@ contract LendingPoolCollateralManager is VersionedInitializable, LendingPoolStor
);
}
+ //if the collateral being liquidated is equal to the user balance,
+ //we set the currency as not being used as collateral anymore
+
+ if (vars.maxCollateralToLiquidate == vars.userCollateralBalance) {
+ userConfig.setUsingAsCollateral(collateralReserve.id, false);
+ emit ReserveUsedAsCollateralDisabled(collateral, user);
+ }
+
//transfers the principal currency to the aToken
IERC20(principal).safeTransferFrom(
msg.sender,
diff --git a/contracts/lendingpool/LendingPoolConfigurator.sol b/contracts/lendingpool/LendingPoolConfigurator.sol
index 8f9c28dd..de091dbb 100644
--- a/contracts/lendingpool/LendingPoolConfigurator.sol
+++ b/contracts/lendingpool/LendingPoolConfigurator.sol
@@ -188,10 +188,21 @@ contract LendingPoolConfigurator is VersionedInitializable {
ILendingPool internal pool;
/**
- * @dev only the lending pool manager can call functions affected by this modifier
+ * @dev only the pool admin can call functions affected by this modifier
**/
- modifier onlyAaveAdmin {
- require(addressesProvider.getAaveAdmin() == msg.sender, Errors.LPC_CALLER_NOT_AAVE_ADMIN);
+ modifier onlyPoolAdmin {
+ require(addressesProvider.getPoolAdmin() == msg.sender, Errors.CALLER_NOT_POOL_ADMIN);
+ _;
+ }
+
+ /**
+ * @dev only the emergency admin can call functions affected by this modifier
+ **/
+ modifier onlyEmergencyAdmin {
+ require(
+ addressesProvider.getEmergencyAdmin() == msg.sender,
+ Errors.LPC_CALLER_NOT_EMERGENCY_ADMIN
+ );
_;
}
@@ -220,7 +231,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
address variableDebtTokenImpl,
uint8 underlyingAssetDecimals,
address interestRateStrategyAddress
- ) public onlyAaveAdmin {
+ ) public onlyPoolAdmin {
address asset = ITokenConfiguration(aTokenImpl).UNDERLYING_ASSET_ADDRESS();
require(
@@ -287,7 +298,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve to be updated
* @param implementation the address of the new aToken implementation
**/
- function updateAToken(address asset, address implementation) external onlyAaveAdmin {
+ function updateAToken(address asset, address implementation) external onlyPoolAdmin {
ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.aTokenAddress, implementation);
@@ -300,7 +311,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve to be updated
* @param implementation the address of the new aToken implementation
**/
- function updateStableDebtToken(address asset, address implementation) external onlyAaveAdmin {
+ function updateStableDebtToken(address asset, address implementation) external onlyPoolAdmin {
ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.stableDebtTokenAddress, implementation);
@@ -313,7 +324,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve to be updated
* @param implementation the address of the new aToken implementation
**/
- function updateVariableDebtToken(address asset, address implementation) external onlyAaveAdmin {
+ function updateVariableDebtToken(address asset, address implementation) external onlyPoolAdmin {
ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.variableDebtTokenAddress, implementation);
@@ -328,7 +339,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
**/
function enableBorrowingOnReserve(address asset, bool stableBorrowRateEnabled)
external
- onlyAaveAdmin
+ onlyPoolAdmin
{
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
@@ -344,7 +355,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev disables borrowing on a reserve
* @param asset the address of the reserve
**/
- function disableBorrowingOnReserve(address asset) external onlyAaveAdmin {
+ function disableBorrowingOnReserve(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setBorrowingEnabled(false);
@@ -354,18 +365,20 @@ contract LendingPoolConfigurator is VersionedInitializable {
}
/**
- * @dev configures the reserve collateralization parameters
+ * @dev configures the reserve collateralization parameters.
+ * all the values are expressed in percentages with two decimals of precision. A valid value is 10000, which means 100.00%
* @param asset the address of the reserve
* @param ltv the loan to value of the asset when used as collateral
* @param liquidationThreshold the threshold at which loans using this asset as collateral will be considered undercollateralized
- * @param liquidationBonus the bonus liquidators receive to liquidate this asset
+ * @param liquidationBonus the bonus liquidators receive to liquidate this asset. The values is always above 100%. A value of 105%
+ * means the liquidator will receive a 5% bonus
**/
function configureReserveAsCollateral(
address asset,
uint256 ltv,
uint256 liquidationThreshold,
uint256 liquidationBonus
- ) external onlyAaveAdmin {
+ ) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
//validation of the parameters: the LTV can
@@ -375,11 +388,14 @@ contract LendingPoolConfigurator is VersionedInitializable {
if (liquidationThreshold != 0) {
//liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less
- //collateral than needed to cover the debt
- require(
- liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,
- Errors.LPC_INVALID_CONFIGURATION
- );
+ //collateral than needed to cover the debt.
+ uint256 absoluteBonus = liquidationBonus.sub(PercentageMath.PERCENTAGE_FACTOR, Errors.LPC_INVALID_CONFIGURATION);
+ require(absoluteBonus > 0, Errors.LPC_INVALID_CONFIGURATION);
+
+ //we also need to require that the liq threshold is lower or equal than the liquidation bonus, to ensure that
+ //there is always enough margin for liquidators to receive the bonus.
+ require(liquidationThreshold.add(absoluteBonus) <= PercentageMath.PERCENTAGE_FACTOR, Errors.LPC_INVALID_CONFIGURATION);
+
} else {
require(liquidationBonus == 0, Errors.LPC_INVALID_CONFIGURATION);
//if the liquidation threshold is being set to 0,
@@ -401,7 +417,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev enable stable rate borrowing on a reserve
* @param asset the address of the reserve
**/
- function enableReserveStableRate(address asset) external onlyAaveAdmin {
+ function enableReserveStableRate(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setStableRateBorrowingEnabled(true);
@@ -415,7 +431,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev disable stable rate borrowing on a reserve
* @param asset the address of the reserve
**/
- function disableReserveStableRate(address asset) external onlyAaveAdmin {
+ function disableReserveStableRate(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setStableRateBorrowingEnabled(false);
@@ -429,7 +445,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev activates a reserve
* @param asset the address of the reserve
**/
- function activateReserve(address asset) external onlyAaveAdmin {
+ function activateReserve(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setActive(true);
@@ -443,7 +459,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev deactivates a reserve
* @param asset the address of the reserve
**/
- function deactivateReserve(address asset) external onlyAaveAdmin {
+ function deactivateReserve(address asset) external onlyPoolAdmin {
_checkNoLiquidity(asset);
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
@@ -459,7 +475,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev freezes a reserve. A frozen reserve doesn't accept any new deposit, borrow or rate swap, but can accept repayments, liquidations, rate rebalances and redeems
* @param asset the address of the reserve
**/
- function freezeReserve(address asset) external onlyAaveAdmin {
+ function freezeReserve(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setFrozen(true);
@@ -473,7 +489,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev unfreezes a reserve
* @param asset the address of the reserve
**/
- function unfreezeReserve(address asset) external onlyAaveAdmin {
+ function unfreezeReserve(address asset) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setFrozen(false);
@@ -488,7 +504,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
* @param ltv the new value for the loan to value
**/
- function setLtv(address asset, uint256 ltv) external onlyAaveAdmin {
+ function setLtv(address asset, uint256 ltv) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setLtv(ltv);
@@ -503,7 +519,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
* @param reserveFactor the new reserve factor of the reserve
**/
- function setReserveFactor(address asset, uint256 reserveFactor) external onlyAaveAdmin {
+ function setReserveFactor(address asset, uint256 reserveFactor) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setReserveFactor(reserveFactor);
@@ -518,7 +534,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
* @param threshold the new value for the liquidation threshold
**/
- function setLiquidationThreshold(address asset, uint256 threshold) external onlyAaveAdmin {
+ function setLiquidationThreshold(address asset, uint256 threshold) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setLiquidationThreshold(threshold);
@@ -533,7 +549,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
* @param bonus the new value for the liquidation bonus
**/
- function setLiquidationBonus(address asset, uint256 bonus) external onlyAaveAdmin {
+ function setLiquidationBonus(address asset, uint256 bonus) external onlyPoolAdmin {
ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
currentConfig.setLiquidationBonus(bonus);
@@ -543,21 +559,6 @@ contract LendingPoolConfigurator is VersionedInitializable {
emit ReserveLiquidationBonusChanged(asset, bonus);
}
- /**
- * @dev updates the reserve decimals
- * @param asset the address of the reserve
- * @param decimals the new number of decimals
- **/
- function setReserveDecimals(address asset, uint256 decimals) external onlyAaveAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
-
- currentConfig.setDecimals(decimals);
-
- pool.setConfiguration(asset, currentConfig.data);
-
- emit ReserveDecimalsChanged(asset, decimals);
- }
-
/**
* @dev sets the interest rate strategy of a reserve
* @param asset the address of the reserve
@@ -565,7 +566,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
**/
function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress)
external
- onlyAaveAdmin
+ onlyPoolAdmin
{
pool.setReserveInterestRateStrategyAddress(asset, rateStrategyAddress);
emit ReserveInterestRateStrategyChanged(asset, rateStrategyAddress);
@@ -620,7 +621,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @dev pauses or unpauses LendingPool actions
* @param val the boolean value to set the current pause state of LendingPool
**/
- function setPoolPause(bool val) external onlyAaveAdmin {
+ function setPoolPause(bool val) external onlyEmergencyAdmin {
pool.setPause(val);
}
diff --git a/contracts/lendingpool/LendingPoolStorage.sol b/contracts/lendingpool/LendingPoolStorage.sol
index ceeadd39..5ea45c6e 100644
--- a/contracts/lendingpool/LendingPoolStorage.sol
+++ b/contracts/lendingpool/LendingPoolStorage.sol
@@ -15,8 +15,6 @@ contract LendingPoolStorage {
mapping(address => ReserveLogic.ReserveData) internal _reserves;
mapping(address => UserConfiguration.Map) internal _usersConfig;
- // debt token address => user who gives allowance => user who receives allowance => amount
- mapping(address => mapping(address => mapping(address => uint256))) internal _borrowAllowance;
// the list of the available reserves, structured as a mapping for gas savings reasons
mapping(uint256 => address) internal _reservesList;
diff --git a/contracts/libraries/configuration/ReserveConfiguration.sol b/contracts/libraries/configuration/ReserveConfiguration.sol
index 7951d91a..71c64bde 100644
--- a/contracts/libraries/configuration/ReserveConfiguration.sol
+++ b/contracts/libraries/configuration/ReserveConfiguration.sol
@@ -86,7 +86,7 @@ library ReserveConfiguration {
}
/**
- * @dev gets the Loan to Value of the reserve
+ * @dev gets the liquidation threshold of the reserve
* @param self the reserve configuration
* @return the liquidation threshold
**/
diff --git a/contracts/libraries/configuration/UserConfiguration.sol b/contracts/libraries/configuration/UserConfiguration.sol
index 71c28f0e..8679390e 100644
--- a/contracts/libraries/configuration/UserConfiguration.sol
+++ b/contracts/libraries/configuration/UserConfiguration.sol
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.6.8;
+import {Errors} from '../helpers/Errors.sol';
/**
* @title UserConfiguration library
* @author Aave
@@ -24,6 +25,7 @@ library UserConfiguration {
uint256 reserveIndex,
bool borrowing
) internal {
+ require(reserveIndex < 128, Errors.UL_INVALID_INDEX);
self.data =
(self.data & ~(1 << (reserveIndex * 2))) |
(uint256(borrowing ? 1 : 0) << (reserveIndex * 2));
@@ -40,6 +42,7 @@ library UserConfiguration {
uint256 reserveIndex,
bool _usingAsCollateral
) internal {
+ require(reserveIndex < 128, Errors.UL_INVALID_INDEX);
self.data =
(self.data & ~(1 << (reserveIndex * 2 + 1))) |
(uint256(_usingAsCollateral ? 1 : 0) << (reserveIndex * 2 + 1));
@@ -56,6 +59,7 @@ library UserConfiguration {
pure
returns (bool)
{
+ require(reserveIndex < 128, Errors.UL_INVALID_INDEX);
return (self.data >> (reserveIndex * 2)) & 3 != 0;
}
@@ -70,6 +74,7 @@ library UserConfiguration {
pure
returns (bool)
{
+ require(reserveIndex < 128, Errors.UL_INVALID_INDEX);
return (self.data >> (reserveIndex * 2)) & 1 != 0;
}
@@ -84,6 +89,7 @@ library UserConfiguration {
pure
returns (bool)
{
+ require(reserveIndex < 128, Errors.UL_INVALID_INDEX);
return (self.data >> (reserveIndex * 2 + 1)) & 1 != 0;
}
diff --git a/contracts/libraries/helpers/Errors.sol b/contracts/libraries/helpers/Errors.sol
index 3b37e91a..3f044b17 100644
--- a/contracts/libraries/helpers/Errors.sol
+++ b/contracts/libraries/helpers/Errors.sol
@@ -17,7 +17,12 @@ pragma solidity ^0.6.8;
* - P = Pausable
*/
library Errors {
- string public constant VL_AMOUNT_NOT_GREATER_THAN_0 = '1'; // 'Amount must be greater than 0'
+ //common errors
+ string public constant CALLER_NOT_POOL_ADMIN = '33'; // 'The caller must be the pool admin'
+ string public constant BORROW_ALLOWANCE_NOT_ENOUGH = '59'; // User borrows on behalf, but allowance are too small
+
+ //contract specific errors
+ string public constant VL_INVALID_AMOUNT = '1'; // 'Amount must be greater than 0'
string public constant VL_NO_ACTIVE_RESERVE = '2'; // 'Action requires an active reserve'
string public constant VL_RESERVE_FROZEN = '3'; // 'Action cannot be performed because the reserve is frozen'
string public constant VL_CURRENT_AVAILABLE_LIQUIDITY_NOT_ENOUGH = '4'; // 'The current liquidity is not enough'
@@ -43,13 +48,12 @@ library Errors {
string public constant LP_NOT_ENOUGH_LIQUIDITY_TO_BORROW = '24'; // 'There is not enough liquidity available to borrow'
string public constant LP_REQUESTED_AMOUNT_TOO_SMALL = '25'; // 'The requested amount is too small for a FlashLoan.'
string public constant LP_INCONSISTENT_PROTOCOL_ACTUAL_BALANCE = '26'; // 'The actual balance of the protocol is inconsistent'
- string public constant LP_CALLER_NOT_LENDING_POOL_CONFIGURATOR = '27'; // 'The actual balance of the protocol is inconsistent'
+ string public constant LP_CALLER_NOT_LENDING_POOL_CONFIGURATOR = '27'; // 'The caller of the function is not the lending pool configurator'
string public constant LP_INCONSISTENT_FLASHLOAN_PARAMS = '28';
string public constant AT_CALLER_MUST_BE_LENDING_POOL = '29'; // 'The caller of this function must be a lending pool'
string public constant AT_CANNOT_GIVE_ALLVWANCE_TO_HIMSELF = '30'; // 'User cannot give allowance to himself'
string public constant AT_TRANSFER_AMOUNT_NOT_GT_0 = '31'; // 'Transferred amount needs to be greater than zero'
string public constant RL_RESERVE_ALREADY_INITIALIZED = '32'; // 'Reserve has already been initialized'
- string public constant LPC_CALLER_NOT_AAVE_ADMIN = '33'; // 'The caller must be the aave admin'
string public constant LPC_RESERVE_LIQUIDITY_NOT_0 = '34'; // 'The liquidity of the reserve needs to be 0'
string public constant LPC_INVALID_ATOKEN_POOL_ADDRESS = '35'; // 'The liquidity of the reserve needs to be 0'
string public constant LPC_INVALID_STABLE_DEBT_TOKEN_POOL_ADDRESS = '36'; // 'The liquidity of the reserve needs to be 0'
@@ -58,6 +62,7 @@ library Errors {
string public constant LPC_INVALID_VARIABLE_DEBT_TOKEN_UNDERLYING_ADDRESS = '39'; // 'The liquidity of the reserve needs to be 0'
string public constant LPC_INVALID_ADDRESSES_PROVIDER_ID = '40'; // 'The liquidity of the reserve needs to be 0'
string public constant LPC_INVALID_CONFIGURATION = '75'; // 'Invalid risk parameters for the reserve'
+ string public constant LPC_CALLER_NOT_EMERGENCY_ADMIN = '76'; // 'The caller must be the emergency admin'
string public constant LPAPR_PROVIDER_NOT_REGISTERED = '41'; // 'Provider is not registered'
string public constant LPCM_HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '42'; // 'Health factor is not below the threshold'
string public constant LPCM_COLLATERAL_CANNOT_BE_LIQUIDATED = '43'; // 'The collateral chosen cannot be liquidated'
@@ -76,7 +81,6 @@ library Errors {
string public constant AT_INVALID_MINT_AMOUNT = '56'; //invalid amount to mint
string public constant LP_FAILED_REPAY_WITH_COLLATERAL = '57';
string public constant AT_INVALID_BURN_AMOUNT = '58'; //invalid amount to burn
- string public constant LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH = '59'; // User borrows on behalf, but allowance are too small
string public constant LP_FAILED_COLLATERAL_SWAP = '60';
string public constant LP_INVALID_EQUAL_ASSETS_TO_SWAP = '61';
string public constant LP_REENTRANCY_NOT_ALLOWED = '62';
@@ -92,6 +96,8 @@ library Errors {
string public constant LPAPR_INVALID_ADDRESSES_PROVIDER_ID = '72';
string public constant VL_INCONSISTENT_FLASHLOAN_PARAMS = '73';
string public constant LP_INCONSISTENT_PARAMS_LENGTH = '74';
+ string public constant UL_INVALID_INDEX = '77';
+ string public constant LP_NOT_CONTRACT = '78';
enum CollateralManagerErrors {
NO_ERROR,
diff --git a/contracts/libraries/helpers/Helpers.sol b/contracts/libraries/helpers/Helpers.sol
index e1d65502..ba8be90c 100644
--- a/contracts/libraries/helpers/Helpers.sol
+++ b/contracts/libraries/helpers/Helpers.sol
@@ -26,4 +26,15 @@ library Helpers {
DebtTokenBase(reserve.variableDebtTokenAddress).balanceOf(user)
);
}
+
+ function getUserCurrentDebtMemory(address user, ReserveLogic.ReserveData memory reserve)
+ internal
+ view
+ returns (uint256, uint256)
+ {
+ return (
+ DebtTokenBase(reserve.stableDebtTokenAddress).balanceOf(user),
+ DebtTokenBase(reserve.variableDebtTokenAddress).balanceOf(user)
+ );
+ }
}
diff --git a/contracts/libraries/logic/ReserveLogic.sol b/contracts/libraries/logic/ReserveLogic.sol
index f3d13628..85fbe28a 100644
--- a/contracts/libraries/logic/ReserveLogic.sol
+++ b/contracts/libraries/logic/ReserveLogic.sol
@@ -76,7 +76,7 @@ library ReserveLogic {
/**
* @dev returns the ongoing normalized income for the reserve.
* a value of 1e27 means there is no income. As time passes, the income is accrued.
- * A value of 2*1e27 means for each unit of assset two units of income have been accrued.
+ * A value of 2*1e27 means for each unit of asset one unit of income has been accrued.
* @param reserve the reserve object
* @return the normalized income. expressed in ray
**/
@@ -119,28 +119,6 @@ library ReserveLogic {
return cumulated;
}
- /**
- * @dev returns an address of the debt token used for particular interest rate mode on asset.
- * @param reserve the reserve object
- * @param interestRateMode - STABLE or VARIABLE from ReserveLogic.InterestRateMode enum
- * @return an address of the corresponding debt token from reserve configuration
- **/
- function getDebtTokenAddress(ReserveLogic.ReserveData storage reserve, uint256 interestRateMode)
- external
- view
- returns (address)
- {
- require(
- ReserveLogic.InterestRateMode.STABLE == ReserveLogic.InterestRateMode(interestRateMode) ||
- ReserveLogic.InterestRateMode.VARIABLE == ReserveLogic.InterestRateMode(interestRateMode),
- Errors.VL_INVALID_INTEREST_RATE_MODE_SELECTED
- );
- return
- ReserveLogic.InterestRateMode.STABLE == ReserveLogic.InterestRateMode(interestRateMode)
- ? reserve.stableDebtTokenAddress
- : reserve.variableDebtTokenAddress;
- }
-
/**
* @dev Updates the liquidity cumulative index Ci and variable borrow cumulative index Bvc. Refer to the whitepaper for
* a formal specification.
@@ -207,15 +185,9 @@ library ReserveLogic {
address interestRateStrategyAddress
) external {
require(reserve.aTokenAddress == address(0), Errors.RL_RESERVE_ALREADY_INITIALIZED);
- if (reserve.liquidityIndex == 0) {
- //if the reserve has not been initialized yet
- reserve.liquidityIndex = uint128(WadRayMath.ray());
- }
-
- if (reserve.variableBorrowIndex == 0) {
- reserve.variableBorrowIndex = uint128(WadRayMath.ray());
- }
-
+
+ reserve.liquidityIndex = uint128(WadRayMath.ray());
+ reserve.variableBorrowIndex = uint128(WadRayMath.ray());
reserve.aTokenAddress = aTokenAddress;
reserve.stableDebtTokenAddress = stableDebtTokenAddress;
reserve.variableDebtTokenAddress = variableDebtTokenAddress;
diff --git a/contracts/libraries/logic/ValidationLogic.sol b/contracts/libraries/logic/ValidationLogic.sol
index 47bf3fd8..4388d9c2 100644
--- a/contracts/libraries/logic/ValidationLogic.sol
+++ b/contracts/libraries/logic/ValidationLogic.sol
@@ -13,6 +13,7 @@ import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
import {UserConfiguration} from '../configuration/UserConfiguration.sol';
import {Errors} from '../helpers/Errors.sol';
import {Helpers} from '../helpers/Helpers.sol';
+import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';
/**
* @title ReserveLogic library
@@ -28,6 +29,9 @@ library ValidationLogic {
using ReserveConfiguration for ReserveConfiguration.Map;
using UserConfiguration for UserConfiguration.Map;
+ uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 4000;
+ uint256 public constant REBALANCE_UP_USAGE_RATIO_THRESHOLD = 0.95 * 1e27; //usage ratio of 95%
+
/**
* @dev validates a deposit.
* @param reserve the reserve state on which the user is depositing
@@ -36,7 +40,7 @@ library ValidationLogic {
function validateDeposit(ReserveLogic.ReserveData storage reserve, uint256 amount) external view {
(bool isActive, bool isFrozen, , ) = reserve.configuration.getFlags();
- require(amount > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0);
+ require(amount != 0, Errors.VL_INVALID_AMOUNT);
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
require(!isFrozen, Errors.VL_RESERVE_FROZEN);
}
@@ -62,10 +66,13 @@ library ValidationLogic {
uint256 reservesCount,
address oracle
) external view {
- require(amount > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0);
+ require(amount != 0, Errors.VL_INVALID_AMOUNT);
require(amount <= userBalance, Errors.VL_NOT_ENOUGH_AVAILABLE_USER_BALANCE);
+ (bool isActive,, , ) = reservesData[reserveAddress].configuration.getFlags();
+ require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
+
require(
GenericLogic.balanceDecreaseAllowed(
reserveAddress,
@@ -139,6 +146,7 @@ library ValidationLogic {
require(vars.isActive, Errors.VL_NO_ACTIVE_RESERVE);
require(!vars.isFrozen, Errors.VL_RESERVE_FROZEN);
+ require(amount != 0, Errors.VL_INVALID_AMOUNT);
require(vars.borrowingEnabled, Errors.VL_BORROWING_NOT_ENABLED);
@@ -232,7 +240,7 @@ library ValidationLogic {
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
- require(amountSent > 0, Errors.VL_AMOUNT_NOT_GREATER_THAN_0);
+ require(amountSent > 0, Errors.VL_INVALID_AMOUNT);
require(
(stableDebt > 0 &&
@@ -292,6 +300,54 @@ library ValidationLogic {
}
}
+ /**
+ * @dev validates a stable borrow rate rebalance
+ * @param reserve the reserve state on which the user is getting rebalanced
+ * @param reserveAddress the address of the reserve
+ * @param stableDebtToken the stable debt token instance
+ * @param variableDebtToken the variable debt token instance
+ * @param aTokenAddress the address of the aToken contract
+ */
+ function validateRebalanceStableBorrowRate(
+ ReserveLogic.ReserveData storage reserve,
+ address reserveAddress,
+ IERC20 stableDebtToken,
+ IERC20 variableDebtToken,
+ address aTokenAddress) external view {
+
+ (bool isActive,,, ) = reserve.configuration.getFlags();
+
+ require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
+
+ //if the usage ratio is below 95%, no rebalances are needed
+ uint256 totalDebt = stableDebtToken
+ .totalSupply()
+ .add(variableDebtToken.totalSupply())
+ .wadToRay();
+ uint256 availableLiquidity = IERC20(reserveAddress).balanceOf(aTokenAddress).wadToRay();
+ uint256 usageRatio = totalDebt == 0
+ ? 0
+ : totalDebt.rayDiv(availableLiquidity.add(totalDebt));
+
+ //if the liquidity rate is below REBALANCE_UP_THRESHOLD of the max variable APR at 95% usage,
+ //then we allow rebalancing of the stable rate positions.
+
+ uint256 currentLiquidityRate = reserve.currentLiquidityRate;
+ uint256 maxVariableBorrowRate = IReserveInterestRateStrategy(
+ reserve
+ .interestRateStrategyAddress
+ )
+ .getMaxVariableBorrowRate();
+
+ require(
+ usageRatio >= REBALANCE_UP_USAGE_RATIO_THRESHOLD &&
+ currentLiquidityRate <=
+ maxVariableBorrowRate.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),
+ Errors.LP_INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET
+ );
+
+ }
+
/**
* @dev validates the choice of a user of setting (or not) an asset as collateral
* @param reserve the state of the reserve that the user is enabling or disabling as collateral
@@ -304,6 +360,7 @@ library ValidationLogic {
function validateSetUseReserveAsCollateral(
ReserveLogic.ReserveData storage reserve,
address reserveAddress,
+ bool useAsCollateral,
mapping(address => ReserveLogic.ReserveData) storage reservesData,
UserConfiguration.Map storage userConfig,
mapping(uint256 => address) storage reserves,
@@ -315,6 +372,7 @@ library ValidationLogic {
require(underlyingBalance > 0, Errors.VL_UNDERLYING_BALANCE_NOT_GREATER_THAN_0);
require(
+ useAsCollateral ||
GenericLogic.balanceDecreaseAllowed(
reserveAddress,
msg.sender,
diff --git a/contracts/misc/AaveProtocolTestHelpers.sol b/contracts/misc/AaveProtocolDataProvider.sol
similarity index 99%
rename from contracts/misc/AaveProtocolTestHelpers.sol
rename to contracts/misc/AaveProtocolDataProvider.sol
index 37732e07..cc35f17d 100644
--- a/contracts/misc/AaveProtocolTestHelpers.sol
+++ b/contracts/misc/AaveProtocolDataProvider.sol
@@ -11,7 +11,7 @@ import {UserConfiguration} from '../libraries/configuration/UserConfiguration.so
import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
-contract AaveProtocolTestHelpers {
+contract AaveProtocolDataProvider {
using ReserveConfiguration for ReserveConfiguration.Map;
using UserConfiguration for UserConfiguration.Map;
diff --git a/contracts/misc/ChainlinkProxyPriceProvider.sol b/contracts/misc/ChainlinkProxyPriceProvider.sol
index a259ba50..f6516abc 100644
--- a/contracts/misc/ChainlinkProxyPriceProvider.sol
+++ b/contracts/misc/ChainlinkProxyPriceProvider.sol
@@ -18,11 +18,13 @@ import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
using SafeERC20 for IERC20;
+ event WethSet(address indexed weth);
event AssetSourceUpdated(address indexed asset, address indexed source);
event FallbackOracleUpdated(address indexed fallbackOracle);
mapping(address => IChainlinkAggregator) private assetsSources;
IPriceOracleGetter private _fallbackOracle;
+ address public immutable WETH;
/// @notice Constructor
/// @param assets The addresses of the assets
@@ -32,10 +34,13 @@ contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
constructor(
address[] memory assets,
address[] memory sources,
- address fallbackOracle
+ address fallbackOracle,
+ address weth
) public {
_setFallbackOracle(fallbackOracle);
_setAssetsSources(assets, sources);
+ WETH = weth;
+ emit WethSet(weth);
}
/// @notice External function called by the Aave governance to set or replace sources of assets
@@ -77,8 +82,10 @@ contract ChainlinkProxyPriceProvider is IPriceOracleGetter, Ownable {
/// @param asset The asset address
function getAssetPrice(address asset) public override view returns (uint256) {
IChainlinkAggregator source = assetsSources[asset];
- // If there is no registered source for the asset, call the fallbackOracle
- if (address(source) == address(0)) {
+
+ if (asset == WETH) {
+ return 1 ether;
+ } else if (address(source) == address(0)) {
return _fallbackOracle.getAssetPrice(asset);
} else {
int256 price = IChainlinkAggregator(source).latestAnswer();
diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol
new file mode 100644
index 00000000..ff731fff
--- /dev/null
+++ b/contracts/misc/UiPoolDataProvider.sol
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+pragma experimental ABIEncoderV2;
+
+import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
+import {IUiPoolDataProvider} from './interfaces/IUiPoolDataProvider.sol';
+import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
+import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';
+import {IAToken} from '../tokenization/interfaces/IAToken.sol';
+import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
+import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
+
+import {WadRayMath} from '../libraries/math/WadRayMath.sol';
+import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
+import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
+import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
+import {
+ DefaultReserveInterestRateStrategy
+} from '../lendingpool/DefaultReserveInterestRateStrategy.sol';
+
+contract UiPoolDataProvider is IUiPoolDataProvider {
+ using WadRayMath for uint256;
+ using ReserveConfiguration for ReserveConfiguration.Map;
+ using UserConfiguration for UserConfiguration.Map;
+
+ address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
+
+ function getInterestRateStrategySlopes(DefaultReserveInterestRateStrategy interestRateStrategy)
+ internal
+ view
+ returns (
+ uint256,
+ uint256,
+ uint256,
+ uint256
+ )
+ {
+ return (
+ interestRateStrategy.variableRateSlope1(),
+ interestRateStrategy.variableRateSlope2(),
+ interestRateStrategy.stableRateSlope1(),
+ interestRateStrategy.stableRateSlope2()
+ );
+ }
+
+ function getReservesData(ILendingPoolAddressesProvider provider, address user)
+ external
+ override
+ view
+ returns (
+ AggregatedReserveData[] memory,
+ UserReserveData[] memory,
+ uint256
+ )
+ {
+ ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
+ IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle());
+ address[] memory reserves = lendingPool.getReservesList();
+ UserConfiguration.Map memory userConfig = lendingPool.getUserConfiguration(user);
+
+ AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length);
+ UserReserveData[] memory userReservesData = new UserReserveData[](
+ user != address(0) ? reserves.length : 0
+ );
+
+ for (uint256 i = 0; i < reserves.length; i++) {
+ AggregatedReserveData memory reserveData = reservesData[i];
+ reserveData.underlyingAsset = reserves[i];
+
+ // reserve current state
+ ReserveLogic.ReserveData memory baseData = lendingPool.getReserveData(
+ reserveData.underlyingAsset
+ );
+ reserveData.liquidityIndex = baseData.liquidityIndex;
+ reserveData.variableBorrowIndex = baseData.variableBorrowIndex;
+ reserveData.liquidityRate = baseData.currentLiquidityRate;
+ reserveData.variableBorrowRate = baseData.currentVariableBorrowRate;
+ reserveData.stableBorrowRate = baseData.currentStableBorrowRate;
+ reserveData.lastUpdateTimestamp = baseData.lastUpdateTimestamp;
+ reserveData.aTokenAddress = baseData.aTokenAddress;
+ reserveData.stableDebtTokenAddress = baseData.stableDebtTokenAddress;
+ reserveData.variableDebtTokenAddress = baseData.variableDebtTokenAddress;
+ reserveData.interestRateStrategyAddress = baseData.interestRateStrategyAddress;
+ reserveData.priceInEth = oracle.getAssetPrice(reserveData.underlyingAsset);
+
+ reserveData.availableLiquidity = IERC20Detailed(reserveData.underlyingAsset).balanceOf(
+ reserveData.aTokenAddress
+ );
+ (
+ reserveData.totalPrincipalStableDebt,
+ ,
+ reserveData.averageStableRate,
+ reserveData.stableDebtLastUpdateTimestamp
+ ) = IStableDebtToken(reserveData.stableDebtTokenAddress).getSupplyData();
+ reserveData.totalScaledVariableDebt = IVariableDebtToken(reserveData.variableDebtTokenAddress)
+ .scaledTotalSupply();
+
+ // reserve configuration
+
+ // we're getting this info from the aToken, because some of assets can be not compliant with ETC20Detailed
+ reserveData.symbol = IERC20Detailed(reserveData.aTokenAddress).symbol();
+ reserveData.name = '';
+
+ (
+ reserveData.baseLTVasCollateral,
+ reserveData.reserveLiquidationThreshold,
+ reserveData.reserveLiquidationBonus,
+ reserveData.decimals,
+ reserveData.reserveFactor
+ ) = baseData.configuration.getParamsMemory();
+ (
+ reserveData.isActive,
+ reserveData.isFrozen,
+ reserveData.borrowingEnabled,
+ reserveData.stableBorrowRateEnabled
+ ) = baseData.configuration.getFlagsMemory();
+ reserveData.usageAsCollateralEnabled = reserveData.baseLTVasCollateral != 0;
+ (
+ reserveData.variableRateSlope1,
+ reserveData.variableRateSlope2,
+ reserveData.stableRateSlope1,
+ reserveData.stableRateSlope2
+ ) = getInterestRateStrategySlopes(
+ DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)
+ );
+
+ if (user != address(0)) {
+ // user reserve data
+ userReservesData[i].underlyingAsset = reserveData.underlyingAsset;
+ userReservesData[i].scaledATokenBalance = IAToken(reserveData.aTokenAddress)
+ .scaledBalanceOf(user);
+ userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i);
+
+ if (userConfig.isBorrowing(i)) {
+ userReservesData[i].scaledVariableDebt = IVariableDebtToken(
+ reserveData
+ .variableDebtTokenAddress
+ )
+ .scaledBalanceOf(user);
+ userReservesData[i].principalStableDebt = IStableDebtToken(
+ reserveData
+ .stableDebtTokenAddress
+ )
+ .principalBalanceOf(user);
+ if (userReservesData[i].principalStableDebt != 0) {
+ userReservesData[i].stableBorrowRate = IStableDebtToken(
+ reserveData
+ .stableDebtTokenAddress
+ )
+ .getUserStableRate(user);
+ userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken(
+ reserveData
+ .stableDebtTokenAddress
+ )
+ .getUserLastUpdated(user);
+ }
+ }
+ }
+ }
+ return (reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS));
+ }
+}
diff --git a/contracts/misc/WETHGateway.sol b/contracts/misc/WETHGateway.sol
new file mode 100644
index 00000000..a976bb0e
--- /dev/null
+++ b/contracts/misc/WETHGateway.sol
@@ -0,0 +1,184 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+pragma experimental ABIEncoderV2;
+
+import {IWETH} from './interfaces/IWETH.sol';
+import {IWETHGateway} from './interfaces/IWETHGateway.sol';
+import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {IAToken} from '../tokenization/interfaces/IAToken.sol';
+import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
+import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
+import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
+import {Helpers} from '../libraries/helpers/Helpers.sol';
+import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
+import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
+
+contract WETHGateway is IWETHGateway, Ownable {
+ using ReserveConfiguration for ReserveConfiguration.Map;
+ using UserConfiguration for UserConfiguration.Map;
+
+ IWETH internal immutable WETH;
+ ILendingPool internal immutable POOL;
+ IAToken internal immutable aWETH;
+
+ /**
+ * @dev Sets the WETH address and the LendingPoolAddressesProvider address. Infinite approves lending pool.
+ * @param weth Address of the Wrapped Ether contract
+ * @param pool Address of the LendingPool contract
+ **/
+ constructor(address weth, address pool) public {
+ ILendingPool poolInstance = ILendingPool(pool);
+ WETH = IWETH(weth);
+ POOL = poolInstance;
+ aWETH = IAToken(poolInstance.getReserveData(weth).aTokenAddress);
+ IWETH(weth).approve(pool, uint256(-1));
+ }
+
+ /**
+ * @dev deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens)
+ * is minted.
+ * @param onBehalfOf address of the user who will receive the aTokens representing the deposit
+ * @param referralCode integrators are assigned a referral code and can potentially receive rewards.
+ **/
+ function depositETH(address onBehalfOf, uint16 referralCode) external override payable {
+ WETH.deposit{value: msg.value}();
+ POOL.deposit(address(WETH), msg.value, onBehalfOf, referralCode);
+ }
+
+ /**
+ * @dev withdraws the WETH _reserves of msg.sender.
+ * @param amount amount of aWETH to withdraw and receive native ETH
+ * @param to address of the user who will receive native ETH
+ */
+ function withdrawETH(uint256 amount, address to) external override {
+ uint256 userBalance = aWETH.balanceOf(msg.sender);
+ uint256 amountToWithdraw = amount;
+
+ // if amount is equal to uint(-1), the user wants to redeem everything
+ if (amount == type(uint256).max) {
+ amountToWithdraw = userBalance;
+ }
+ aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);
+ POOL.withdraw(address(WETH), amountToWithdraw, address(this));
+ WETH.withdraw(amountToWithdraw);
+ _safeTransferETH(to, amountToWithdraw);
+ }
+
+ /**
+ * @dev repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).
+ * @param amount the amount to repay, or uint256(-1) if the user wants to repay everything
+ * @param rateMode the rate mode to repay
+ * @param onBehalfOf the address for which msg.sender is repaying
+ */
+ function repayETH(
+ uint256 amount,
+ uint256 rateMode,
+ address onBehalfOf
+ ) external override payable {
+ (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebtMemory(
+ onBehalfOf,
+ POOL.getReserveData(address(WETH))
+ );
+
+ uint256 paybackAmount = ReserveLogic.InterestRateMode(rateMode) ==
+ ReserveLogic.InterestRateMode.STABLE
+ ? stableDebt
+ : variableDebt;
+
+ if (amount < paybackAmount) {
+ paybackAmount = amount;
+ }
+ require(msg.value >= paybackAmount, 'msg.value is less than repayment amount');
+ WETH.deposit{value: paybackAmount}();
+ POOL.repay(address(WETH), msg.value, rateMode, onBehalfOf);
+
+ // refund remaining dust eth
+ if (msg.value > paybackAmount) _safeTransferETH(msg.sender, msg.value - paybackAmount);
+ }
+
+ /**
+ * @dev borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `LendingPool.borrow`.
+ * @param amount the amount of ETH to borrow
+ * @param interesRateMode the interest rate mode
+ * @param referralCode integrators are assigned a referral code and can potentially receive rewards
+ */
+ function borrowETH(
+ uint256 amount,
+ uint256 interesRateMode,
+ uint16 referralCode
+ ) external override {
+ POOL.borrow(address(WETH), amount, interesRateMode, referralCode, msg.sender);
+ WETH.withdraw(amount);
+ _safeTransferETH(msg.sender, amount);
+ }
+
+ /**
+ * @dev transfer ETH to an address, revert if it fails.
+ * @param to recipient of the transfer
+ * @param value the amount to send
+ */
+ function _safeTransferETH(address to, uint256 value) internal {
+ (bool success, ) = to.call{value: value}(new bytes(0));
+ require(success, 'ETH_TRANSFER_FAILED');
+ }
+
+ /**
+ * @dev transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due
+ * direct transfers to the contract address.
+ * @param token token to transfer
+ * @param to recipient of the transfer
+ * @param amount amount to send
+ */
+ function emergencyTokenTransfer(
+ address token,
+ address to,
+ uint256 amount
+ ) external onlyOwner {
+ IERC20(token).transfer(to, amount);
+ }
+
+ /**
+ * @dev transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether
+ * due selfdestructs or transfer ether to pre-computated contract address before deployment.
+ * @param to recipient of the transfer
+ * @param amount amount to send
+ */
+ function emergencyEtherTransfer(address to, uint256 amount) external onlyOwner {
+ _safeTransferETH(to, amount);
+ }
+
+ /**
+ * @dev Get WETH address used by WETHGateway
+ */
+ function getWETHAddress() external view returns (address) {
+ return address(WETH);
+ }
+
+ /**
+ * @dev Get aWETH address used by WETHGateway
+ */
+ function getAWETHAddress() external view returns (address) {
+ return address(aWETH);
+ }
+
+ /**
+ * @dev Get LendingPool address used by WETHGateway
+ */
+ function getLendingPoolAddress() external view returns (address) {
+ return address(POOL);
+ }
+
+ /**
+ * @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract.
+ */
+ receive() external payable {
+ require(msg.sender == address(WETH), 'Receive not allowed');
+ }
+
+ /**
+ * @dev Revert fallback calls
+ */
+ fallback() external payable {
+ revert('Fallback not allowed');
+ }
+}
diff --git a/contracts/misc/WalletBalanceProvider.sol b/contracts/misc/WalletBalanceProvider.sol
index 6bbb2970..c3f5dd7f 100644
--- a/contracts/misc/WalletBalanceProvider.sol
+++ b/contracts/misc/WalletBalanceProvider.sol
@@ -6,7 +6,7 @@ pragma experimental ABIEncoderV2;
import {Address} from '../dependencies/openzeppelin/contracts/Address.sol';
import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
-import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol';
+import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
@@ -24,9 +24,10 @@ contract WalletBalanceProvider {
using SafeERC20 for IERC20;
using ReserveConfiguration for ReserveConfiguration.Map;
- LendingPoolAddressesProvider internal immutable _provider;
+ ILendingPoolAddressesProvider internal immutable _provider;
+ address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
- constructor(LendingPoolAddressesProvider provider) public {
+ constructor(ILendingPoolAddressesProvider provider) public {
_provider = provider;
}
@@ -45,12 +46,13 @@ contract WalletBalanceProvider {
- return 0 on non-contract address
**/
function balanceOf(address user, address token) public view returns (uint256) {
- // check if token is actually a contract
- if (token.isContract()) {
+ if (token == MOCK_ETH_ADDRESS) {
+ return user.balance; // ETH balance
+ // check if token is actually a contract
+ } else if (token.isContract()) {
return IERC20(token).balanceOf(user);
- } else {
- return 0;
}
+ revert('INVALID_TOKEN');
}
/**
@@ -68,12 +70,7 @@ contract WalletBalanceProvider {
for (uint256 i = 0; i < users.length; i++) {
for (uint256 j = 0; j < tokens.length; j++) {
- uint256 _offset = i * tokens.length;
- if (!tokens[j].isContract()) {
- revert('INVALID_TOKEN');
- } else {
- balances[_offset + j] = balanceOf(users[i], tokens[j]);
- }
+ balances[i * tokens.length + j] = balanceOf(users[i], tokens[j]);
}
}
@@ -91,11 +88,16 @@ contract WalletBalanceProvider {
ILendingPool pool = ILendingPool(_provider.getLendingPool());
address[] memory reserves = pool.getReservesList();
+ address[] memory reservesWithEth = new address[](reserves.length + 1);
+ for (uint256 i = 0; i < reserves.length; i++) {
+ reservesWithEth[i] = reserves[i];
+ }
+ reservesWithEth[reserves.length] = MOCK_ETH_ADDRESS;
- uint256[] memory balances = new uint256[](reserves.length);
+ uint256[] memory balances = new uint256[](reservesWithEth.length);
for (uint256 j = 0; j < reserves.length; j++) {
- ReserveConfiguration.Map memory configuration = pool.getConfiguration(reserves[j]);
+ ReserveConfiguration.Map memory configuration = pool.getConfiguration(reservesWithEth[j]);
(bool isActive, , , ) = configuration.getFlagsMemory();
@@ -103,9 +105,10 @@ contract WalletBalanceProvider {
balances[j] = 0;
continue;
}
- balances[j] = balanceOf(user, reserves[j]);
+ balances[j] = balanceOf(user, reservesWithEth[j]);
}
+ balances[reserves.length] = balanceOf(user, MOCK_ETH_ADDRESS);
- return (reserves, balances);
+ return (reservesWithEth, balances);
}
}
diff --git a/contracts/misc/IERC20DetailedBytes.sol b/contracts/misc/interfaces/IERC20DetailedBytes.sol
similarity index 100%
rename from contracts/misc/IERC20DetailedBytes.sol
rename to contracts/misc/interfaces/IERC20DetailedBytes.sol
diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol
new file mode 100644
index 00000000..d1ca0269
--- /dev/null
+++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+pragma experimental ABIEncoderV2;
+
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
+import {ReserveLogic} from '../../libraries/logic/ReserveLogic.sol';
+
+interface IUiPoolDataProvider {
+ struct AggregatedReserveData {
+ address underlyingAsset;
+ string name;
+ string symbol;
+ uint256 decimals;
+ uint256 baseLTVasCollateral;
+ uint256 reserveLiquidationThreshold;
+ uint256 reserveLiquidationBonus;
+ uint256 reserveFactor;
+ bool usageAsCollateralEnabled;
+ bool borrowingEnabled;
+ bool stableBorrowRateEnabled;
+ bool isActive;
+ bool isFrozen;
+ // base data
+ uint128 liquidityIndex;
+ uint128 variableBorrowIndex;
+ uint128 liquidityRate;
+ uint128 variableBorrowRate;
+ uint128 stableBorrowRate;
+ uint40 lastUpdateTimestamp;
+ address aTokenAddress;
+ address stableDebtTokenAddress;
+ address variableDebtTokenAddress;
+ address interestRateStrategyAddress;
+ //
+ uint256 availableLiquidity;
+ uint256 totalPrincipalStableDebt;
+ uint256 averageStableRate;
+ uint256 stableDebtLastUpdateTimestamp;
+ uint256 totalScaledVariableDebt;
+ uint256 priceInEth;
+ uint256 variableRateSlope1;
+ uint256 variableRateSlope2;
+ uint256 stableRateSlope1;
+ uint256 stableRateSlope2;
+ }
+ //
+ // struct ReserveData {
+ // uint256 averageStableBorrowRate;
+ // uint256 totalLiquidity;
+ // }
+
+ struct UserReserveData {
+ address underlyingAsset;
+ uint256 scaledATokenBalance;
+ bool usageAsCollateralEnabledOnUser;
+ uint256 stableBorrowRate;
+ uint256 scaledVariableDebt;
+ uint256 principalStableDebt;
+ uint256 stableBorrowLastUpdateTimestamp;
+ }
+
+ //
+ // struct ATokenSupplyData {
+ // string name;
+ // string symbol;
+ // uint8 decimals;
+ // uint256 totalSupply;
+ // address aTokenAddress;
+ // }
+
+ function getReservesData(ILendingPoolAddressesProvider provider, address user)
+ external
+ view
+ returns (
+ AggregatedReserveData[] memory,
+ UserReserveData[] memory,
+ uint256
+ );
+
+ // function getUserReservesData(ILendingPoolAddressesProvider provider, address user)
+ // external
+ // view
+ // returns (UserReserveData[] memory);
+ //
+ // function getAllATokenSupply(ILendingPoolAddressesProvider provider)
+ // external
+ // view
+ // returns (ATokenSupplyData[] memory);
+ //
+ // function getATokenSupply(address[] calldata aTokens)
+ // external
+ // view
+ // returns (ATokenSupplyData[] memory);
+}
diff --git a/contracts/misc/interfaces/IWETH.sol b/contracts/misc/interfaces/IWETH.sol
new file mode 100644
index 00000000..cb661927
--- /dev/null
+++ b/contracts/misc/interfaces/IWETH.sol
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+
+interface IWETH {
+ function deposit() external payable;
+
+ function withdraw(uint256) external;
+
+ function approve(address guy, uint256 wad) external returns (bool);
+
+ function transferFrom(
+ address src,
+ address dst,
+ uint256 wad
+ ) external returns (bool);
+}
diff --git a/contracts/misc/interfaces/IWETHGateway.sol b/contracts/misc/interfaces/IWETHGateway.sol
new file mode 100644
index 00000000..fae7a1e8
--- /dev/null
+++ b/contracts/misc/interfaces/IWETHGateway.sol
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+
+interface IWETHGateway {
+ function depositETH(address onBehalfOf, uint16 referralCode) external payable;
+
+ function withdrawETH(uint256 amount, address onBehalfOf) external;
+
+ function repayETH(
+ uint256 amount,
+ uint256 rateMode,
+ address onBehalfOf
+ ) external payable;
+
+ function borrowETH(
+ uint256 amount,
+ uint256 interesRateMode,
+ uint16 referralCode
+ ) external;
+}
diff --git a/contracts/mocks/attacks/SefldestructTransfer.sol b/contracts/mocks/attacks/SefldestructTransfer.sol
new file mode 100644
index 00000000..5c8750c1
--- /dev/null
+++ b/contracts/mocks/attacks/SefldestructTransfer.sol
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+
+contract SelfdestructTransfer {
+ function destroyAndTransfer(address payable to) external payable {
+ selfdestruct(to);
+ }
+}
diff --git a/contracts/mocks/dependencies/weth/WETH9.sol b/contracts/mocks/dependencies/weth/WETH9.sol
new file mode 100644
index 00000000..1907b736
--- /dev/null
+++ b/contracts/mocks/dependencies/weth/WETH9.sol
@@ -0,0 +1,758 @@
+// Copyright (C) 2015, 2016, 2017 Dapphub
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+pragma solidity >=0.4.22 <=0.6.8;
+
+contract WETH9 {
+ string public name = 'Wrapped Ether';
+ string public symbol = 'WETH';
+ uint8 public decimals = 18;
+
+ event Approval(address indexed src, address indexed guy, uint256 wad);
+ event Transfer(address indexed src, address indexed dst, uint256 wad);
+ event Deposit(address indexed dst, uint256 wad);
+ event Withdrawal(address indexed src, uint256 wad);
+
+ mapping(address => uint256) public balanceOf;
+ mapping(address => mapping(address => uint256)) public allowance;
+
+ receive() external payable {
+ deposit();
+ }
+
+ function deposit() public payable {
+ balanceOf[msg.sender] += msg.value;
+ emit Deposit(msg.sender, msg.value);
+ }
+
+ function withdraw(uint256 wad) public {
+ require(balanceOf[msg.sender] >= wad);
+ balanceOf[msg.sender] -= wad;
+ msg.sender.transfer(wad);
+ emit Withdrawal(msg.sender, wad);
+ }
+
+ function totalSupply() public view returns (uint256) {
+ return address(this).balance;
+ }
+
+ function approve(address guy, uint256 wad) public returns (bool) {
+ allowance[msg.sender][guy] = wad;
+ emit Approval(msg.sender, guy, wad);
+ return true;
+ }
+
+ function transfer(address dst, uint256 wad) public returns (bool) {
+ return transferFrom(msg.sender, dst, wad);
+ }
+
+ function transferFrom(
+ address src,
+ address dst,
+ uint256 wad
+ ) public returns (bool) {
+ require(balanceOf[src] >= wad);
+
+ if (src != msg.sender && allowance[src][msg.sender] != uint256(-1)) {
+ require(allowance[src][msg.sender] >= wad);
+ allowance[src][msg.sender] -= wad;
+ }
+
+ balanceOf[src] -= wad;
+ balanceOf[dst] += wad;
+
+ emit Transfer(src, dst, wad);
+
+ return true;
+ }
+}
+
+/*
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
+
+*/
diff --git a/contracts/mocks/flashloan/MockFlashLoanReceiver.sol b/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
index 215746ae..cfd16c28 100644
--- a/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
+++ b/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
@@ -72,7 +72,6 @@ contract MockFlashLoanReceiver is FlashLoanReceiverBase {
? _amountToApprove
: amounts[i].add(premiums[i]);
//execution does not fail - mint tokens and return them to the _destination
- //note: if the reserve is eth, the mock contract must receive at least _fee ETH before calling executeOperation
token.mint(premiums[i]);
diff --git a/contracts/mocks/tokens/MintableDelegationERC20.sol b/contracts/mocks/tokens/MintableDelegationERC20.sol
new file mode 100644
index 00000000..1b3088d5
--- /dev/null
+++ b/contracts/mocks/tokens/MintableDelegationERC20.sol
@@ -0,0 +1,34 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+
+import {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';
+
+/**
+ * @title ERC20Mintable
+ * @dev ERC20 minting logic
+ */
+contract MintableDelegationERC20 is ERC20 {
+ address public delegatee;
+
+ constructor(
+ string memory name,
+ string memory symbol,
+ uint8 decimals
+ ) public ERC20(name, symbol) {
+ _setupDecimals(decimals);
+ }
+
+ /**
+ * @dev Function to mint tokensp
+ * @param value The amount of tokens to mint.
+ * @return A boolean that indicates if the operation was successful.
+ */
+ function mint(uint256 value) public returns (bool) {
+ _mint(msg.sender, value);
+ return true;
+ }
+
+ function delegate(address delegateeAddress) external {
+ delegatee = delegateeAddress;
+ }
+}
diff --git a/contracts/mocks/tokens/WETH9Mocked.sol b/contracts/mocks/tokens/WETH9Mocked.sol
new file mode 100644
index 00000000..edcb1ca5
--- /dev/null
+++ b/contracts/mocks/tokens/WETH9Mocked.sol
@@ -0,0 +1,11 @@
+pragma solidity >=0.4.22 <=0.6.8;
+
+import {WETH9} from '../dependencies/weth/WETH9.sol';
+
+contract WETH9Mocked is WETH9 {
+ // Mint not backed by Ether: only for testing purposes
+ function mint(uint256 value) public returns (bool) {
+ balanceOf[msg.sender] += value;
+ emit Transfer(address(0), msg.sender, value);
+ }
+}
diff --git a/contracts/tokenization/AToken.sol b/contracts/tokenization/AToken.sol
index 0454f908..2f2be6cb 100644
--- a/contracts/tokenization/AToken.sol
+++ b/contracts/tokenization/AToken.sol
@@ -13,7 +13,7 @@ import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
/**
* @title Aave ERC20 AToken
*
- * @dev Implementation of the interest bearing token for the DLP protocol.
+ * @dev Implementation of the interest bearing token for the Aave protocol.
* @author Aave
*/
contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
@@ -108,7 +108,7 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
//transfer event to track balances
emit Transfer(user, address(0), amount);
- emit Burn(_msgSender(), receiverOfUnderlying, amount, index);
+ emit Burn(user, receiverOfUnderlying, amount, index);
}
/**
@@ -175,6 +175,8 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
//being a normal transfer, the Transfer() and BalanceTransfer() are emitted
//so no need to emit a specific event here
_transfer(from, to, value, false);
+
+ emit Transfer(from, to, value);
}
/**
diff --git a/contracts/tokenization/DelegationAwareAToken.sol b/contracts/tokenization/DelegationAwareAToken.sol
new file mode 100644
index 00000000..794fd4f5
--- /dev/null
+++ b/contracts/tokenization/DelegationAwareAToken.sol
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity ^0.6.8;
+
+import {AToken} from './AToken.sol';
+import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {Errors} from '../libraries/helpers/Errors.sol';
+
+/**
+ * @title IDelegationToken
+ * @dev implements an interface for tokens that have a delegation function
+ **/
+interface IDelegationToken {
+ function delegate(address delegatee) external;
+}
+
+/**
+ * @title Aave AToken with delegation capabilities
+ *
+ * @dev Implementation of the interest bearing token for the Aave protocol. This version of the aToken
+ * adds a function which gives the Aave protocol the ability to delegate voting power of the underlying asset.
+ * The underlying asset needs to be compatible with the COMP delegation interface
+ * @author Aave
+ */
+contract DelegationAwareAToken is AToken {
+ /**
+ * @dev only the aave admin can call this function
+ **/
+ modifier onlyPoolAdmin {
+ require(
+ _msgSender() == ILendingPool(POOL).getAddressesProvider().getPoolAdmin(),
+ Errors.CALLER_NOT_POOL_ADMIN
+ );
+ _;
+ }
+
+ constructor(
+ ILendingPool pool,
+ address underlyingAssetAddress,
+ address reserveTreasury,
+ string memory tokenName,
+ string memory tokenSymbol,
+ address incentivesController
+ )
+ public
+ AToken(
+ pool,
+ underlyingAssetAddress,
+ reserveTreasury,
+ tokenName,
+ tokenSymbol,
+ incentivesController
+ )
+ {}
+
+ function initialize(
+ uint8 _underlyingAssetDecimals,
+ string calldata _tokenName,
+ string calldata _tokenSymbol
+ ) external virtual override initializer {
+ _setName(_tokenName);
+ _setSymbol(_tokenSymbol);
+ _setDecimals(_underlyingAssetDecimals);
+ }
+
+ /**
+ * @dev delegates voting power of the underlying asset to a specific address
+ * @param delegatee the address that will receive the delegation
+ **/
+ function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin {
+ IDelegationToken(UNDERLYING_ASSET_ADDRESS).delegate(delegatee);
+ }
+}
diff --git a/contracts/tokenization/StableDebtToken.sol b/contracts/tokenization/StableDebtToken.sol
index d7c76857..ca76237c 100644
--- a/contracts/tokenization/StableDebtToken.sol
+++ b/contracts/tokenization/StableDebtToken.sol
@@ -16,9 +16,10 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
uint256 public constant DEBT_TOKEN_REVISION = 0x1;
- uint256 private _avgStableRate;
- mapping(address => uint40) _timestamps;
- uint40 _totalSupplyTimestamp;
+ uint256 internal _avgStableRate;
+ mapping(address => uint40) internal _timestamps;
+ mapping(address => uint256) internal _usersStableRate;
+ uint40 internal _totalSupplyTimestamp;
constructor(
address pool,
@@ -58,7 +59,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @return the stable rate of user
**/
function getUserStableRate(address user) external virtual override view returns (uint256) {
- return _usersData[user];
+ return _usersStableRate[user];
}
/**
@@ -67,7 +68,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
**/
function balanceOf(address account) public virtual override view returns (uint256) {
uint256 accountBalance = super.balanceOf(account);
- uint256 stableRate = _usersData[account];
+ uint256 stableRate = _usersStableRate[account];
if (accountBalance == 0) {
return 0;
}
@@ -95,17 +96,18 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
**/
function mint(
address user,
+ address onBehalfOf,
uint256 amount,
uint256 rate
) external override onlyLendingPool returns (bool) {
MintLocalVars memory vars;
+ if (user != onBehalfOf) {
+ _decreaseBorrowAllowance(onBehalfOf, user, amount);
+ }
+
//cumulates the user debt
- (
- uint256 previousBalance,
- uint256 currentBalance,
- uint256 balanceIncrease
- ) = _calculateBalanceIncrease(user);
+ (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);
//accrueing the interest accumulation to the stored total supply and caching it
vars.previousSupply = totalSupply();
@@ -115,17 +117,17 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
vars.amountInRay = amount.wadToRay();
//calculates the new stable rate for the user
- vars.newStableRate = _usersData[user]
+ vars.newStableRate = _usersStableRate[onBehalfOf]
.rayMul(currentBalance.wadToRay())
.add(vars.amountInRay.rayMul(rate))
.rayDiv(currentBalance.add(amount).wadToRay());
require(vars.newStableRate < (1 << 128), 'Debt token: stable rate overflow');
- _usersData[user] = vars.newStableRate;
+ _usersStableRate[onBehalfOf] = vars.newStableRate;
//updating the user and supply timestamp
//solium-disable-next-line
- _totalSupplyTimestamp = _timestamps[user] = uint40(block.timestamp);
+ _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);
//calculates the updated average stable rate
vars.currentAvgStableRate = _avgStableRate = vars
@@ -134,19 +136,20 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
.add(rate.rayMul(vars.amountInRay))
.rayDiv(vars.nextSupply.wadToRay());
- _mint(user, amount.add(balanceIncrease), vars.previousSupply);
+ _mint(onBehalfOf, amount.add(balanceIncrease), vars.previousSupply);
// transfer event to track balances
- emit Transfer(address(0), user, amount);
+ emit Transfer(address(0), onBehalfOf, amount);
emit Mint(
user,
+ onBehalfOf,
amount,
- previousBalance,
currentBalance,
balanceIncrease,
vars.newStableRate,
- vars.currentAvgStableRate
+ vars.currentAvgStableRate,
+ vars.nextSupply
);
return currentBalance == 0;
@@ -158,32 +161,37 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @param amount the amount of debt tokens to mint
**/
function burn(address user, uint256 amount) external override onlyLendingPool {
- (
- uint256 previousBalance,
- uint256 currentBalance,
- uint256 balanceIncrease
- ) = _calculateBalanceIncrease(user);
+ (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(user);
uint256 previousSupply = totalSupply();
uint256 newStableRate = 0;
+ uint256 nextSupply = 0;
+ uint256 userStableRate = _usersStableRate[user];
//since the total supply and each single user debt accrue separately,
//there might be accumulation errors so that the last borrower repaying
//might actually try to repay more than the available debt supply.
//in this case we simply set the total supply and the avg stable rate to 0
if (previousSupply <= amount) {
- newStableRate = _avgStableRate = 0;
+ _avgStableRate = 0;
_totalSupply = 0;
} else {
- uint256 nextSupply = _totalSupply = previousSupply.sub(amount);
- newStableRate = _avgStableRate = _avgStableRate
- .rayMul(previousSupply.wadToRay())
- .sub(_usersData[user].rayMul(amount.wadToRay()))
- .rayDiv(nextSupply.wadToRay());
+ nextSupply = _totalSupply = previousSupply.sub(amount);
+ uint256 firstTerm = _avgStableRate.rayMul(previousSupply.wadToRay());
+ uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());
+
+ //for the same reason described above, when the last user is repaying it might
+ //happen that user rate * user balance > avg rate * total supply. In that case,
+ //we simply set the avg rate to 0
+ if (secondTerm >= firstTerm) {
+ newStableRate = _avgStableRate = _totalSupply = 0;
+ } else {
+ newStableRate = _avgStableRate = firstTerm.sub(secondTerm).rayDiv(nextSupply.wadToRay());
+ }
}
if (amount == currentBalance) {
- _usersData[user] = 0;
+ _usersStableRate[user] = 0;
_timestamps[user] = 0;
} else {
//solium-disable-next-line
@@ -201,7 +209,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
// transfer event to track balances
emit Transfer(user, address(0), amount);
- emit Burn(user, amount, previousBalance, currentBalance, balanceIncrease, newStableRate);
+ emit Burn(user, amount, currentBalance, balanceIncrease, newStableRate, nextSupply);
}
/**
diff --git a/contracts/tokenization/VariableDebtToken.sol b/contracts/tokenization/VariableDebtToken.sol
index 6f16082b..ef429b53 100644
--- a/contracts/tokenization/VariableDebtToken.sol
+++ b/contracts/tokenization/VariableDebtToken.sol
@@ -55,17 +55,22 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
**/
function mint(
address user,
+ address onBehalfOf,
uint256 amount,
uint256 index
) external override onlyLendingPool returns (bool) {
- uint256 previousBalance = super.balanceOf(user);
+ if (user != onBehalfOf) {
+ _decreaseBorrowAllowance(onBehalfOf, user, amount);
+ }
+
+ uint256 previousBalance = super.balanceOf(onBehalfOf);
uint256 amountScaled = amount.rayDiv(index);
require(amountScaled != 0, Errors.AT_INVALID_MINT_AMOUNT);
- _mint(user, amountScaled);
+ _mint(onBehalfOf, amountScaled);
- emit Transfer(address(0), user, amount);
- emit Mint(user, amount, index);
+ emit Transfer(address(0), onBehalfOf, amount);
+ emit Mint(user, onBehalfOf, amount, index);
return previousBalance == 0;
}
diff --git a/contracts/tokenization/base/DebtTokenBase.sol b/contracts/tokenization/base/DebtTokenBase.sol
index 723bb5d2..b1b9963c 100644
--- a/contracts/tokenization/base/DebtTokenBase.sol
+++ b/contracts/tokenization/base/DebtTokenBase.sol
@@ -15,9 +15,17 @@ import {Errors} from '../../libraries/helpers/Errors.sol';
*/
abstract contract DebtTokenBase is IncentivizedERC20, VersionedInitializable {
+ event BorrowAllowanceDelegated(
+ address indexed fromUser,
+ address indexed toUser,
+ address asset,
+ uint256 amount
+ );
+
address public immutable UNDERLYING_ASSET_ADDRESS;
ILendingPool public immutable POOL;
- mapping(address => uint256) internal _usersData;
+
+ mapping(address => mapping(address => uint256)) internal _borrowAllowances;
/**
* @dev Only lending pool can call functions marked by this modifier
@@ -58,6 +66,28 @@ abstract contract DebtTokenBase is IncentivizedERC20, VersionedInitializable {
_setDecimals(decimals);
}
+ /**
+ * @dev delegates borrowing power to a user on the specific debt token
+ * @param delegatee the address receiving the delegated borrowing power
+ * @param amount the maximum amount being delegated. Delegation will still
+ * respect the liquidation constraints (even if delegated, a delegatee cannot
+ * force a delegator HF to go below 1)
+ **/
+ function approveDelegation(address delegatee, uint256 amount) external {
+ _borrowAllowances[_msgSender()][delegatee] = amount;
+ emit BorrowAllowanceDelegated(_msgSender(), delegatee, UNDERLYING_ASSET_ADDRESS, amount);
+ }
+
+ /**
+ * @dev returns the borrow allowance of the user
+ * @param fromUser The user to giving allowance
+ * @param toUser The user to give allowance to
+ * @return the current allowance of toUser
+ **/
+ function borrowAllowance(address fromUser, address toUser) external view returns (uint256) {
+ return _borrowAllowances[fromUser][toUser];
+ }
+
/**
* @dev Being non transferrable, the debt token does not implement any of the
* standard ERC20 functions for transfer and allowance.
@@ -118,4 +148,19 @@ abstract contract DebtTokenBase is IncentivizedERC20, VersionedInitializable {
subtractedValue;
revert('ALLOWANCE_NOT_SUPPORTED');
}
+
+ function _decreaseBorrowAllowance(
+ address delegator,
+ address delegatee,
+ uint256 amount
+ ) internal {
+ uint256 newAllowance = _borrowAllowances[delegator][delegatee].sub(
+ amount,
+ Errors.BORROW_ALLOWANCE_NOT_ENOUGH
+ );
+
+ _borrowAllowances[delegator][delegatee] = newAllowance;
+
+ emit BorrowAllowanceDelegated(delegator, delegatee, UNDERLYING_ASSET_ADDRESS, newAllowance);
+ }
}
diff --git a/contracts/tokenization/interfaces/IAToken.sol b/contracts/tokenization/interfaces/IAToken.sol
index 055e3f5d..13cf6cb7 100644
--- a/contracts/tokenization/interfaces/IAToken.sol
+++ b/contracts/tokenization/interfaces/IAToken.sol
@@ -5,6 +5,27 @@ import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
interface IAToken is IERC20, IScaledBalanceToken {
+ /**
+ * @dev emitted after the mint action
+ * @param from the address performing the mint
+ * @param value the amount to be minted
+ * @param index the last index of the reserve
+ **/
+ event Mint(address indexed from, uint256 value, uint256 index);
+
+ /**
+ * @dev mints aTokens to user
+ * only lending pools can call this function
+ * @param user the address receiving the minted tokens
+ * @param amount the amount of tokens to mint
+ * @param index the liquidity index
+ */
+ function mint(
+ address user,
+ uint256 amount,
+ uint256 index
+ ) external returns (bool);
+
/**
* @dev emitted after aTokens are burned
* @param from the address performing the redeem
diff --git a/contracts/tokenization/interfaces/IScaledBalanceToken.sol b/contracts/tokenization/interfaces/IScaledBalanceToken.sol
index 604706c2..ee1a132c 100644
--- a/contracts/tokenization/interfaces/IScaledBalanceToken.sol
+++ b/contracts/tokenization/interfaces/IScaledBalanceToken.sol
@@ -2,27 +2,6 @@
pragma solidity ^0.6.8;
interface IScaledBalanceToken {
- /**
- * @dev emitted after the mint action
- * @param from the address performing the mint
- * @param value the amount to be minted
- * @param index the last index of the reserve
- **/
- event Mint(address indexed from, uint256 value, uint256 index);
-
- /**
- * @dev mints aTokens to user
- * only lending pools can call this function
- * @param user the address receiving the minted tokens
- * @param amount the amount of tokens to mint
- * @param index the liquidity index
- */
- function mint(
- address user,
- uint256 amount,
- uint256 index
- ) external returns (bool);
-
/**
* @dev returns the principal balance of the user. The principal balance is the last
* updated stored balance, which does not consider the perpetually accruing interest.
diff --git a/contracts/tokenization/interfaces/IStableDebtToken.sol b/contracts/tokenization/interfaces/IStableDebtToken.sol
index 7a6e5f5b..af71aab2 100644
--- a/contracts/tokenization/interfaces/IStableDebtToken.sol
+++ b/contracts/tokenization/interfaces/IStableDebtToken.sol
@@ -15,40 +15,42 @@ pragma solidity ^0.6.8;
interface IStableDebtToken {
/**
* @dev emitted when new stable debt is minted
- * @param user the address of the user
+ * @param user the address of the user who triggered the minting
+ * @param onBehalfOf the address of the user
* @param amount the amount minted
- * @param previousBalance the previous balance of the user
* @param currentBalance the current balance of the user
- * @param balanceIncrease the debt increase since the last update
+ * @param balanceIncrease the the increase in balance since the last action of the user
* @param newRate the rate of the debt after the minting
* @param avgStableRate the new average stable rate after the minting
+ * @param newTotalSupply the new total supply of the stable debt token after the action
**/
event Mint(
address indexed user,
+ address indexed onBehalfOf,
uint256 amount,
- uint256 previousBalance,
uint256 currentBalance,
uint256 balanceIncrease,
uint256 newRate,
- uint256 avgStableRate
+ uint256 avgStableRate,
+ uint256 newTotalSupply
);
/**
* @dev emitted when new stable debt is burned
* @param user the address of the user
* @param amount the amount minted
- * @param previousBalance the previous balance of the user
* @param currentBalance the current balance of the user
- * @param balanceIncrease the debt increase since the last update
+ * @param balanceIncrease the the increase in balance since the last action of the user
* @param avgStableRate the new average stable rate after the minting
+ * @param newTotalSupply the new total supply of the stable debt token after the action
**/
event Burn(
address indexed user,
uint256 amount,
- uint256 previousBalance,
uint256 currentBalance,
uint256 balanceIncrease,
- uint256 avgStableRate
+ uint256 avgStableRate,
+ uint256 newTotalSupply
);
/**
@@ -60,6 +62,7 @@ interface IStableDebtToken {
**/
function mint(
address user,
+ address onBehalfOf,
uint256 amount,
uint256 rate
) external returns (bool);
diff --git a/contracts/tokenization/interfaces/IVariableDebtToken.sol b/contracts/tokenization/interfaces/IVariableDebtToken.sol
index f1988be8..c01b50ce 100644
--- a/contracts/tokenization/interfaces/IVariableDebtToken.sol
+++ b/contracts/tokenization/interfaces/IVariableDebtToken.sol
@@ -9,6 +9,29 @@ import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
* @notice defines the basic interface for a variable debt token.
**/
interface IVariableDebtToken is IScaledBalanceToken {
+ /**
+ * @dev emitted after the mint action
+ * @param from the address performing the mint
+ * @param onBehalfOf the address of the user on which behalf minting has been performed
+ * @param value the amount to be minted
+ * @param index the last index of the reserve
+ **/
+ event Mint(address indexed from, address indexed onBehalfOf, uint256 value, uint256 index);
+
+ /**
+ * @dev mints aTokens to user
+ * only lending pools can call this function
+ * @param user the address receiving the minted tokens
+ * @param amount the amount of tokens to mint
+ * @param index the liquidity index
+ */
+ function mint(
+ address user,
+ address onBehalfOf,
+ uint256 amount,
+ uint256 index
+ ) external returns (bool);
+
/**
* @dev emitted when variable debt is burnt
* @param user the user which debt has been burned
diff --git a/coverage.json b/coverage.json
index a5225afd..2b521a35 100644
--- a/coverage.json
+++ b/coverage.json
@@ -107,7 +107,7 @@
"loc": {"start": {"line": 82, "column": 2}, "end": {"line": 85, "column": 2}}
},
"7": {
- "name": "getAaveAdmin",
+ "name": "getPoolAdmin",
"line": 92,
"loc": {"start": {"line": 92, "column": 2}, "end": {"line": 94, "column": 2}}
},
@@ -5449,7 +5449,7 @@
}
}
},
- "contracts/misc/AaveProtocolTestHelpers.sol": {
+ "contracts/misc/AaveProtocolDataProvider.sol": {
"l": {
"18": 3,
"22": 1,
@@ -5466,7 +5466,7 @@
"42": 34,
"47": 2
},
- "path": "/src/contracts/misc/AaveProtocolTestHelpers.sol",
+ "path": "/src/contracts/misc/AaveProtocolDataProvider.sol",
"s": {
"1": 3,
"2": 1,
diff --git a/deployed-contracts.json b/deployed-contracts.json
index a2173231..67361d8c 100644
--- a/deployed-contracts.json
+++ b/deployed-contracts.json
@@ -1,7 +1,11 @@
{
"MintableERC20": {
"buidlerevm": {
- "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22",
+ "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
@@ -9,6 +13,10 @@
"buidlerevm": {
"address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LEND": {
@@ -21,249 +29,1260 @@
"buidlerevm": {
"address": "0x0078371BDeDE8aAc7DeBfFf451B74c5EDB385Af7",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x0078371BDeDE8aAc7DeBfFf451B74c5EDB385Af7",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"BAT": {
"buidlerevm": {
"address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xf4e77E5Da47AC3125140c470c71cBca77B5c638c",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"WETH": {
"buidlerevm": {
"address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"USDC": {
"buidlerevm": {
"address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x3619DbE27d7c1e7E91aA738697Ae7Bc5FC3eACA5",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"USDT": {
"buidlerevm": {
"address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x038B86d9d8FAFdd0a02ebd1A476432877b0107C8",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"SUSD": {
"buidlerevm": {
"address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x1A1FEe7EeD918BD762173e4dc5EfDB8a78C924A8",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"ZRX": {
"buidlerevm": {
"address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x500D1d6A4c7D8Ae28240b47c8FCde034D827fD5e",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MKR": {
"buidlerevm": {
"address": "0xc4905364b78a742ccce7B890A89514061E47068D",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xc4905364b78a742ccce7B890A89514061E47068D",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"WBTC": {
"buidlerevm": {
"address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LINK": {
"buidlerevm": {
"address": "0x8B5B7a6055E54a36fF574bbE40cf2eA68d5554b3",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x8B5B7a6055E54a36fF574bbE40cf2eA68d5554b3",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"KNC": {
"buidlerevm": {
"address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xEcc0a6dbC0bb4D51E4F84A315a9e5B0438cAD4f0",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MANA": {
"buidlerevm": {
"address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x20Ce94F404343aD2752A2D01b43fa407db9E0D00",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"REP": {
"buidlerevm": {
"address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x1d80315fac6aBd3EfeEbE97dEc44461ba7556160",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"SNX": {
"buidlerevm": {
- "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5",
+ "address": "0x52d3b94181f8654db2530b0fEe1B19173f519C52",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x52d3b94181f8654db2530b0fEe1B19173f519C52",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"BUSD": {
"buidlerevm": {
- "address": "0x52d3b94181f8654db2530b0fEe1B19173f519C52",
+ "address": "0xd15468525c35BDBC1eD8F2e09A00F8a173437f2f",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xd15468525c35BDBC1eD8F2e09A00F8a173437f2f",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"USD": {
"buidlerevm": {
- "address": "0xd15468525c35BDBC1eD8F2e09A00F8a173437f2f",
+ "address": "0x7e35Eaf7e8FBd7887ad538D4A38Df5BbD073814a",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x7e35Eaf7e8FBd7887ad538D4A38Df5BbD073814a",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_DAI_ETH": {
"buidlerevm": {
- "address": "0x7e35Eaf7e8FBd7887ad538D4A38Df5BbD073814a",
+ "address": "0xB00cC45B4a7d3e1FEE684cFc4417998A1c183e6d",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xB00cC45B4a7d3e1FEE684cFc4417998A1c183e6d",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_USDC_ETH": {
"buidlerevm": {
- "address": "0x5bcb88A0d20426e451332eE6C4324b0e663c50E0",
+ "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_SETH_ETH": {
"buidlerevm": {
- "address": "0x3521eF8AaB0323004A6dD8b03CE890F4Ea3A13f5",
+ "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_LINK_ETH": {
"buidlerevm": {
- "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E",
+ "address": "0x22474D350EC2dA53D717E30b96e9a2B7628Ede5b",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x22474D350EC2dA53D717E30b96e9a2B7628Ede5b",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_MKR_ETH": {
"buidlerevm": {
- "address": "0xB00cC45B4a7d3e1FEE684cFc4417998A1c183e6d",
+ "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"UNI_LEND_ETH": {
"buidlerevm": {
- "address": "0x58F132FBB86E21545A4Bace3C19f1C05d86d7A22",
+ "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingPoolAddressesProvider": {
"buidlerevm": {
- "address": "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF",
+ "address": "0xFAe0fd738dAbc8a0426F47437322b6d026A9FD95",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x2ed9F124cF9b079DDBbFb68D352FB83bdeFc39Ee",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0xFAe0fd738dAbc8a0426F47437322b6d026A9FD95",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingPoolAddressesProviderRegistry": {
"buidlerevm": {
- "address": "0x5A0773Ff307Bf7C71a832dBB5312237fD3437f9F",
+ "address": "0x18b9306737eaf6E8FC8e737F488a1AE077b18053",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0xAA14619F08ADe8109F47905CAda9EDDee0c876c3",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x12080583C4F0211eC382d33a273E6D0f9fAb0F75",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"ReserveLogic": {
"buidlerevm": {
- "address": "0x78Ee8Fb9fE5abD5e347Fc94c2fb85596d1f60e3c",
+ "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x89b33E0CB2294f5c09ACB6281B37DED90Cd8025F",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"GenericLogic": {
"buidlerevm": {
- "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7",
+ "address": "0xA4765Ff72A9F3CfE73089bb2c3a41B838DF71574",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x86EB6F23b497320742eb1dDab598fD04c3E11682",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"ValidationLogic": {
"buidlerevm": {
- "address": "0xA4765Ff72A9F3CfE73089bb2c3a41B838DF71574",
+ "address": "0x35c1419Da7cf0Ff885B8Ef8EA9242FEF6800c99b",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0xe0bd0Adcca9de46aE8fe8E50276A13b4c1dfE931",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0xa43Ba00FCA75B805D17f67F9433b971E9a398690",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingPool": {
"buidlerevm": {
- "address": "0x35c1419Da7cf0Ff885B8Ef8EA9242FEF6800c99b",
+ "address": "0xe2607EabC87fd0A4856840bF23da8458cDF0434F",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x212B0b733BFbc58D3B62b79Da1B38E915057039f"
+ },
+ "hardhat": {
+ "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingPoolConfigurator": {
"buidlerevm": {
- "address": "0x6642B57e4265BAD868C17Fc1d1F4F88DBBA04Aa8"
+ "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
+ },
+ "kovan": {
+ "address": "0xD57c7ad0F079EbA38B0c1972d68d13f78719FC00"
+ },
+ "hardhat": {
+ "address": "0xdbaA15927b1463EdD14Cf51D082BD7703Fd1C238"
}
},
"StableAndVariableTokensHelper": {
"buidlerevm": {
- "address": "0x0C6c3C47A1f650809B0D1048FDf9603e09473D7E",
+ "address": "0x06bA8d8af0dF898D0712DffFb0f862cC51AF45c2",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0xF67bbFB9265b7eA7c450F405673690A11a20748D",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x099d9fF8F818290C8b5B7Db5bFca84CEebd2714c",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"ATokensAndRatesHelper": {
"buidlerevm": {
- "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7",
+ "address": "0xA4765Ff72A9F3CfE73089bb2c3a41B838DF71574",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x8177E36Fc8Cb12c31F0e463F39394fC417345B56",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x85bdE212E66e2BAE510E44Ed59116c1eC712795b",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"PriceOracle": {
"buidlerevm": {
- "address": "0xb682dEEf4f8e298d86bFc3e21f50c675151FB974",
+ "address": "0x1750499D05Ed1674d822430FB960d5F6731fDf64",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xe1B3b8F6b298b52bCd15357ED29e65e66a4045fF",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MockAggregator": {
"buidlerevm": {
- "address": "0x3D8FFB457fedDFBc760F3F243283F52692b579B1",
+ "address": "0xEC1C93A9f6a9e18E97784c76aC52053587FcDB89",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xfA9dbd706c674801F50169f4B5862cCe045408E6",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"ChainlinkProxyPriceProvider": {
"buidlerevm": {
- "address": "0xEC1C93A9f6a9e18E97784c76aC52053587FcDB89",
+ "address": "0x7B6C3e5486D9e6959441ab554A889099eed76290",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xCeEa6148D75268b6E930AE41d7a31baE1CA318d8",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"LendingRateOracle": {
"buidlerevm": {
- "address": "0xAF6BA11790D1942625C0c2dA07da19AB63845cfF",
+ "address": "0xD83D2773a7873ae2b5f8Fb92097e20a8C64F691E",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x98B40aAC844674B2287556E75b3ef5530DfCfcB7",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
- "AaveProtocolTestHelpers": {
+ "AaveProtocolDataProvider": {
"buidlerevm": {
- "address": "0xf4830d6b1D70C8595d3BD8A63f9ed9F636DB9ef2"
+ "address": "0x93472C0e03215F9c33DA240Eb16703C8244eAa8c"
+ },
+ "kovan": {
+ "address": "0x2457cE7EFe23B8887B08006004C3Fdb4E3252094",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x3392c115Ff2CE1A782B4a965fF770da61e69228E"
}
},
"LendingPoolCollateralManager": {
"buidlerevm": {
- "address": "0x8D0206fEBEB380486729b64bB4cfEDC5b354a6D6",
+ "address": "0x3c5408De7435Dfa3eB2aF2Edf5E39385f68F69b2",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x15fF71A8F0B1E43AF2A0D3554c9F8E41601bCE6b",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MockFlashLoanReceiver": {
"buidlerevm": {
- "address": "0xfC88832bac6AbdF216BC5A67be68E9DE94aD5ba2"
+ "address": "0x0459c841b02Aee8730730C737582c53B20a27288"
+ },
+ "hardhat": {
+ "address": "0x2530ce07D254eA185E8e0bCC37a39e2FbA3bE548"
}
},
"WalletBalanceProvider": {
"buidlerevm": {
- "address": "0x1256eBA4d0a7A38D10BaF4F61775ba491Ce7EE25",
+ "address": "0x77B0b5636fEA30eA79BB65AeCCdb599997A849A8",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x3aCd4b30bC70647620989B9f98C4E21867Bd753A",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MockAToken": {
"buidlerevm": {
- "address": "0x77B0b5636fEA30eA79BB65AeCCdb599997A849A8",
+ "address": "0x0EBCa695959e5f138Af772FAa44ce1A9C7aEd921",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MockStableDebtToken": {
"buidlerevm": {
- "address": "0x78Ee8Fb9fE5abD5e347Fc94c2fb85596d1f60e3c",
+ "address": "0x417fc1038b2AF553D65F4fF2839efE9f93Ec1eac",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
},
"MockVariableDebtToken": {
"buidlerevm": {
- "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7",
+ "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xbAc762e2000b6815268587b081Fd17aC25519aD5",
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
}
+ },
+ "WETHGateway": {
+ "buidlerevm": {
+ "address": "0x0Cf45557d25a4e4c0F1aC65EF6c48ae67c61a0E6",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "kovan": {
+ "address": "0x7d8B46401dC07ccA3f65F0FBBfE834D61C76C54f",
+ "deployer": "0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F"
+ },
+ "hardhat": {
+ "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "WETHMocked": {
+ "buidlerevm": {
+ "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0xf784709d2317D872237C4bC22f867d1BAe2913AB",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "MintableDelegationERC20": {
+ "buidlerevm": {
+ "address": "0x7fAeC7791277Ff512c41CA903c177B2Ed952dDAc",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "AAVE": {
+ "buidlerevm": {
+ "address": "0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "REN": {
+ "buidlerevm": {
+ "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x2D8553F9ddA85A9B3259F6Bf26911364B85556F5",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "YFI": {
+ "buidlerevm": {
+ "address": "0x5bcb88A0d20426e451332eE6C4324b0e663c50E0",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x5bcb88A0d20426e451332eE6C4324b0e663c50E0",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "UNI": {
+ "buidlerevm": {
+ "address": "0x3521eF8AaB0323004A6dD8b03CE890F4Ea3A13f5",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x3521eF8AaB0323004A6dD8b03CE890F4Ea3A13f5",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "AToken": {
+ "buidlerevm": {
+ "address": "0x33958cC3535Fc328369EAC2B2Bebd120D67C7fa1",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "SelfdestructTransferMock": {
+ "buidlerevm": {
+ "address": "0x920d847fE49E54C19047ba8bc236C45A8068Bca7",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x2cBbbBE1B75Ad7848F0844215816F551f429c64f",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "ENJ": {
+ "buidlerevm": {
+ "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ },
+ "hardhat": {
+ "address": "0x53369fd4680FfE3DfF39Fc6DDa9CfbfD43daeA2E",
+ "deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
+ }
+ },
+ "LendingPoolImpl": {
+ "kovan": {
+ "address": "0x301F889146aaFEfD88d5D442eEcd12AeAC3D1Fc3"
+ },
+ "hardhat": {
+ "address": "0xAa7BC1924711B77A0F3Aaebdd550BfeDDDbaf3cd"
+ }
+ },
+ "LendingPoolConfiguratorImpl": {
+ "kovan": {
+ "address": "0x25d9A07E6a749488f36e3c89A38C8235adb33AA2"
+ },
+ "hardhat": {
+ "address": "0x1750499D05Ed1674d822430FB960d5F6731fDf64"
+ }
+ },
+ "LendingPoolCollateralManagerImpl": {
+ "kovan": {
+ "address": "0x15fF71A8F0B1E43AF2A0D3554c9F8E41601bCE6b"
+ },
+ "hardhat": {
+ "address": "0x8BFFF31B1757da579Bb5B118489568526F7fb6D4"
+ }
+ },
+ "stableDebtAAVE": {
+ "kovan": {
+ "address": "0x9d6cD3e0cb7A916dD788BE8937Db2E28E653083F"
+ },
+ "hardhat": {
+ "address": "0xcFB79d2c986Ca61Dbd288f80108b9e8C4cC6522b"
+ }
+ },
+ "variableDebtAAVE": {
+ "kovan": {
+ "address": "0x7069766BAEAE5042eF9Efa25D423853Fa244e03D"
+ },
+ "hardhat": {
+ "address": "0x1073981e3D3Af966a1137a3460dB881AAED7ae7a"
+ }
+ },
+ "stableDebtBAT": {
+ "kovan": {
+ "address": "0x7bA20003bc65A551aAc9670b96520F544556025D"
+ },
+ "hardhat": {
+ "address": "0x4c90c5Fa9C907F2C993E66446E022260e2AfC8d1"
+ }
+ },
+ "variableDebtBAT": {
+ "kovan": {
+ "address": "0x25bfFB7E493bAAd885Ad7EE676E5e32c6F85D6FE"
+ },
+ "hardhat": {
+ "address": "0x86BAB8904c2969DE5EF732F8BC1D805C1aD56ddD"
+ }
+ },
+ "stableDebtBUSD": {
+ "kovan": {
+ "address": "0xA5bb990BA8c1367dF8b34a7628Db1786790782E8"
+ },
+ "hardhat": {
+ "address": "0xa279C092B779bD051DA5333978e30647501AA958"
+ }
+ },
+ "variableDebtBUSD": {
+ "kovan": {
+ "address": "0xa75EF57f21484029bA17cb31A59176500dA95Bf0"
+ },
+ "hardhat": {
+ "address": "0xeB24f8Dff752f099AA106207b8f49818ca78D02e"
+ }
+ },
+ "stableDebtDAI": {
+ "kovan": {
+ "address": "0x83B7666885dAC6D68f9f32569EC0F4585979d74B"
+ },
+ "hardhat": {
+ "address": "0x7cc0483c098d4e36f2f0AF72a7B13E40E13cd613"
+ }
+ },
+ "variableDebtDAI": {
+ "kovan": {
+ "address": "0x897d762EF8fe013a824503d5Eda2a329Ad98f7E0"
+ },
+ "hardhat": {
+ "address": "0x38E82417A3b37f7faA75d2DD6260d5C24f529e1e"
+ }
+ },
+ "aAAVE": {
+ "kovan": {
+ "address": "0x74A4A2a5437bF9152A1abfa08f0E83D0737C588C"
+ },
+ "hardhat": {
+ "address": "0x6e5d1a9C405DF46a8503893DBa99c3af5Dc1FB5A"
+ }
+ },
+ "strategyAAVE": {
+ "kovan": {
+ "address": "0xeD83FCcA01A74690c9d0Bc75283F612655347f67"
+ },
+ "hardhat": {
+ "address": "0xCDfa18cdFEFCa96D6c79628c6ef941201b63faE4"
+ }
+ },
+ "aBAT": {
+ "kovan": {
+ "address": "0x35bCbf4f3d63dC55b79178A423b0e601b4ef5FD2"
+ },
+ "hardhat": {
+ "address": "0xCaA841b61FfEf4017209311f2B0B2e2f88eBA3bc"
+ }
+ },
+ "strategyBAT": {
+ "kovan": {
+ "address": "0x277b52f138647392496355d87bF03a1aB6c83024"
+ },
+ "hardhat": {
+ "address": "0x8225B75F6eed9415D3FEABAa5B53628c6c7D29E2"
+ }
+ },
+ "aBUSD": {
+ "kovan": {
+ "address": "0x9E709c81c73eEcE90766B277babCfa66F1965565"
+ },
+ "hardhat": {
+ "address": "0x7EebA31C65BCceBF0F2ef6eFf9edf170De96A139"
+ }
+ },
+ "strategyBUSD": {
+ "kovan": {
+ "address": "0xe302038c6E3f7541ACe4DcCF08D666F845450166"
+ },
+ "hardhat": {
+ "address": "0x66D0d53519B4A06f007A2Da43599EB844f6F4a7e"
+ }
+ },
+ "aDAI": {
+ "kovan": {
+ "address": "0x9edb979F40cA59f759e9Eca68a6dFeA56B8d299b"
+ },
+ "hardhat": {
+ "address": "0xf72805fA3E8Bd360bCBA4d069FC3B882001bB017"
+ }
+ },
+ "strategyDAI": {
+ "kovan": {
+ "address": "0xa43a28500d79C25bf83ACAF5E90a46b689b3EB16"
+ },
+ "hardhat": {
+ "address": "0xB79EcFC3ea936e0e904DA3190CD1C8b8cc5F99B5"
+ }
+ },
+ "stableDebtENJ": {
+ "kovan": {
+ "address": "0x9fBE02f08e79f8aA129a46a23E8A18e027B6e2EF"
+ },
+ "hardhat": {
+ "address": "0xFE6c73d2880c7F5D2CDfe495C500AF94fECd09E9"
+ }
+ },
+ "variableDebtENJ": {
+ "kovan": {
+ "address": "0xFA80B658A4bacD6282267428206Afaa3Cf888cd6"
+ },
+ "hardhat": {
+ "address": "0x1890c00253FbD4130A4191CDA13e443b8708DEAF"
+ }
+ },
+ "stableDebtKNC": {
+ "kovan": {
+ "address": "0xAF9EfC82E89a872F8AEf28c81258dfEa712AfFfE"
+ },
+ "hardhat": {
+ "address": "0xfdAA87AfAF7F617F84480eDc705d8Fd4B78EDEcB"
+ }
+ },
+ "variableDebtKNC": {
+ "kovan": {
+ "address": "0xa371C49E252d3c11e050A47ff88d8D15cDf114A1"
+ },
+ "hardhat": {
+ "address": "0x8A420528eC19177Deb9f1F0e2965964018f896c7"
+ }
+ },
+ "stableDebtLINK": {
+ "kovan": {
+ "address": "0xdF0812bdf765E3b77746e961C501313083b1aFa5"
+ },
+ "hardhat": {
+ "address": "0x8a8eB2979316f4F173A97ff91E0e1Dd106039ad4"
+ }
+ },
+ "variableDebtLINK": {
+ "kovan": {
+ "address": "0x3f7389a4e2A351Fd9107d645108a6535Ed1232E4"
+ },
+ "hardhat": {
+ "address": "0xa0207cf18d773Bae5F5d816fc674fF8FFd0D6fE6"
+ }
+ },
+ "stableDebtMANA": {
+ "kovan": {
+ "address": "0x217013C9bFE969979eB8efe94f3dfAeE35492C50"
+ },
+ "hardhat": {
+ "address": "0xE5107B38FFB21AD61185785816559f8B3aA54Ac5"
+ }
+ },
+ "variableDebtMANA": {
+ "kovan": {
+ "address": "0x5945e37b1ef058c5847b048786ac3fCdd40e56DE"
+ },
+ "hardhat": {
+ "address": "0x1259DA780FF797C1a11d534b0BaC534eD2b3F109"
+ }
+ },
+ "aENJ": {
+ "kovan": {
+ "address": "0xc8fad67D303D8fCF6abe3206E4BF94D797Ef71f3"
+ },
+ "hardhat": {
+ "address": "0xa9DFb142061Ef496F48078d9eA39A2D992236D0f"
+ }
+ },
+ "strategyENJ": {
+ "kovan": {
+ "address": "0x537d2F788d0B598D5a921532D4086EDE3B2cEd64"
+ },
+ "hardhat": {
+ "address": "0xaaE80234037A18Ee462b1727ed0621b54dFcEDA6"
+ }
+ },
+ "aKNC": {
+ "kovan": {
+ "address": "0x49c9eC52427E9ccd13eF0702d5b2e028Ce99A217"
+ },
+ "hardhat": {
+ "address": "0x8076E5d426aa3B5C4c98570b3a9033EE67aFe849"
+ }
+ },
+ "strategyKNC": {
+ "kovan": {
+ "address": "0x1308fCd27933fF5639C9f51c86A17A3645c5dED9"
+ },
+ "hardhat": {
+ "address": "0x87809db6234f27E3AacDEb316c00DbFCA77B11B3"
+ }
+ },
+ "aLINK": {
+ "kovan": {
+ "address": "0x917e32953DA5eA01fb7FAEB90A19aeb51Cd42c23"
+ },
+ "hardhat": {
+ "address": "0xe90Ad292698ddaE3Dc305Eb98Ff5FD7341c8a637"
+ }
+ },
+ "strategyLINK": {
+ "kovan": {
+ "address": "0xA891181D5dca4b6a8F5d2607E456CFa9EB9D1D20"
+ },
+ "hardhat": {
+ "address": "0x436d1eE2EDa1F7a98f2418709d10465c98Ed3828"
+ }
+ },
+ "aMANA": {
+ "kovan": {
+ "address": "0x2419b9D71F42D8C72176bA5C2c7bF152F0692814"
+ },
+ "hardhat": {
+ "address": "0x8599378fE42e4FB26Ad214FB1545076EB19b8b0f"
+ }
+ },
+ "strategyMANA": {
+ "kovan": {
+ "address": "0x886e231f0ca34deF2dBf091AA5d6be4cFa06B557"
+ },
+ "hardhat": {
+ "address": "0x487E219628bb5227b2B490CaEE2E2b47ec06D204"
+ }
+ },
+ "stableDebtMKR": {
+ "kovan": {
+ "address": "0x2a8617F6802a1CCA29f2974837eaBD6630E80994"
+ },
+ "hardhat": {
+ "address": "0x3deF3E7577D5Ddf0ea10fB58730fECdA673711C8"
+ }
+ },
+ "variableDebtMKR": {
+ "kovan": {
+ "address": "0xF75cC2a6C928198681D35c8117df83699189169D"
+ },
+ "hardhat": {
+ "address": "0x509B355B5d665a209e888B20B818e53fAdEb47B7"
+ }
+ },
+ "stableDebtREN": {
+ "kovan": {
+ "address": "0x598F59917d13269D8D81ab21Ea37F4B8e099e875"
+ },
+ "hardhat": {
+ "address": "0x2A7C4a4D6b7db3beF0e277D950192c421aF4BD69"
+ }
+ },
+ "variableDebtREN": {
+ "kovan": {
+ "address": "0x3140a105ede15FEc9391fef89e6d14b62B86C39B"
+ },
+ "hardhat": {
+ "address": "0x5d1B59460fa295F6B4DEB74C74F4D11f4de60517"
+ }
+ },
+ "stableDebtREP": {
+ "kovan": {
+ "address": "0x33160b3737a1869264601C4B8D97e98725920c16"
+ },
+ "hardhat": {
+ "address": "0x80288A583c216fB0F6a7ccA1Fbc22d7727E2135a"
+ }
+ },
+ "variableDebtREP": {
+ "kovan": {
+ "address": "0x995487BB75AEc2375fdB216BfcB37b53f6Ab2abb"
+ },
+ "hardhat": {
+ "address": "0xd7E287c1B79c7DA0F6fF7cdEA1026f1223c24F8a"
+ }
+ },
+ "stableDebtSNX": {
+ "kovan": {
+ "address": "0x77E8Addb01e36c5d754E89d0E5Da951e202d9CE3"
+ },
+ "hardhat": {
+ "address": "0x0Aa250b8A76d9228Cc7609013cc77c500Ee802E7"
+ }
+ },
+ "variableDebtSNX": {
+ "kovan": {
+ "address": "0x969e82694032cc0C346f855e52c5503B4e42F850"
+ },
+ "hardhat": {
+ "address": "0xf45700a9EAD19BFA6770802E3807E3eE37E8E492"
+ }
+ },
+ "aMKR": {
+ "kovan": {
+ "address": "0xc3b70569D534C3E17B06C4a25980Ab349b534263"
+ },
+ "hardhat": {
+ "address": "0x05EDF38bB3D948E96745f39072d59dCc915194Dd"
+ }
+ },
+ "strategyMKR": {
+ "kovan": {
+ "address": "0x81DB8B1f3612FdAAA7A211d073dB4C8dcc5a98e7"
+ },
+ "hardhat": {
+ "address": "0x90D5cff61508785557eaA45DeED1297809F49371"
+ }
+ },
+ "aREN": {
+ "kovan": {
+ "address": "0x2Bed39d993276E548987e4271475696897254a17"
+ },
+ "hardhat": {
+ "address": "0xB436Db1757e0c474DaF67666BC35F5fF7062541D"
+ }
+ },
+ "strategyREN": {
+ "kovan": {
+ "address": "0x49a4CDd903A6644cF696F7E1d4404BBBC973470E"
+ },
+ "hardhat": {
+ "address": "0x26eC70DcA80E8dBDaAcBff415aCdcF791C89CEBe"
+ }
+ },
+ "aREP": {
+ "kovan": {
+ "address": "0x04adf3717C2066cd338804909467e67C968B7Dd7"
+ },
+ "hardhat": {
+ "address": "0xfcD974Cec976c536745bBB30e6C7E083a1Ab82EC"
+ }
+ },
+ "strategyREP": {
+ "kovan": {
+ "address": "0x5D271675dA68679DB9a8A8E3501cB7c21fd84cE3"
+ },
+ "hardhat": {
+ "address": "0x0E7f0c6Bf3bA63A28e1EFdDb7F3186A24b90566D"
+ }
+ },
+ "aSNX": {
+ "kovan": {
+ "address": "0x023eba3646A08BA06CfCCB5c8F684048d1B654bb"
+ },
+ "hardhat": {
+ "address": "0x21FA83fB5d14301B53Efc6e44C565C80063d1c50"
+ }
+ },
+ "strategySNX": {
+ "kovan": {
+ "address": "0x866a1F54F13a00B9747C7832881a15234284D38C"
+ },
+ "hardhat": {
+ "address": "0x5806cCA75C8fEf151881d93E7e81EB103F23fb7b"
+ }
+ },
+ "stableDebtSUSD": {
+ "kovan": {
+ "address": "0x5Eac7b30C376081f293d5671f1B4a789a36Ba8C8"
+ },
+ "hardhat": {
+ "address": "0xDfD96D3cac8b157176292c547A61eD7586713527"
+ }
+ },
+ "variableDebtSUSD": {
+ "kovan": {
+ "address": "0x34939cC14762b4993E0679231ECE9aC51836c071"
+ },
+ "hardhat": {
+ "address": "0xcc94Ce18B9a7522d12675cA3fFC1A862Ac0373C1"
+ }
+ },
+ "stableDebtTUSD": {
+ "kovan": {
+ "address": "0xc3031590B298aB7591a59e467c944215236f7878"
+ },
+ "hardhat": {
+ "address": "0x2C4ec78AD3Ff19F35e0dbF35837490C4f7b4224E"
+ }
+ },
+ "variableDebtTUSD": {
+ "kovan": {
+ "address": "0x1E913eCe8FFcC67d86671ba3Ae7676F385722941"
+ },
+ "hardhat": {
+ "address": "0xC9C2c855fA6EAFc5780B661b2CD1c8985c45D720"
+ }
+ },
+ "stableDebtUNI": {
+ "kovan": {
+ "address": "0x6C9ee95b637c44322C6fA244D0106a52Dc2cB6F9"
+ },
+ "hardhat": {
+ "address": "0x1a2f37C5Ed6bEA450Ac31E10ED682994C7C77835"
+ }
+ },
+ "variableDebtUNI": {
+ "kovan": {
+ "address": "0xFEbef6B52C72A49CD8150284aD7277a7454373e0"
+ },
+ "hardhat": {
+ "address": "0x83D129a2efFa0ba0d5B09f7CdfBEaDE1F847201E"
+ }
+ },
+ "stableDebtUSDC": {
+ "kovan": {
+ "address": "0xaD56D9738Aa70D518298c37Cd7C5Fc81ba987023"
+ },
+ "hardhat": {
+ "address": "0xBb78BcaB8e39C38C6E019fe49E43b2591FAa6a58"
+ }
+ },
+ "variableDebtUSDC": {
+ "kovan": {
+ "address": "0x38CA9234844ADBceB823462CC8666569883b9701"
+ },
+ "hardhat": {
+ "address": "0xF5B3b70cb53852617B1fde19242bED043A885B4B"
+ }
+ },
+ "aSUSD": {
+ "kovan": {
+ "address": "0x6EFA6906A391B4F62914f6Ae4650aC2154f89bE7"
+ },
+ "hardhat": {
+ "address": "0x4bb47D17F31181c8BE088CE21574B4e973212C39"
+ }
+ },
+ "strategySUSD": {
+ "kovan": {
+ "address": "0x144E8b18609B2dF30AD96789Db5c6feb9259626c"
+ },
+ "hardhat": {
+ "address": "0x632a0Cf1e008011CC3185c9989205aa29BF267Df"
+ }
+ },
+ "aTUSD": {
+ "kovan": {
+ "address": "0x88ab5455013e2c00De2ABA5F48DEff10CFEDb490"
+ },
+ "hardhat": {
+ "address": "0x2A3CcaB4Fb2A3B34f6A819Cfc50918fe96D64122"
+ }
+ },
+ "strategyTUSD": {
+ "kovan": {
+ "address": "0xF862594F5C4061ac21547A9868716e12f0B59AC2"
+ },
+ "hardhat": {
+ "address": "0x8B151819355Bfb7dE62e5b1D7580F43B34ed86e8"
+ }
+ },
+ "aUNI": {
+ "kovan": {
+ "address": "0x5aEE290afe3778d218DcD59C61A18Bacfa22bBae"
+ },
+ "hardhat": {
+ "address": "0x388e76350476e23A80eA6403B525aDa86ed7af6E"
+ }
+ },
+ "strategyUNI": {
+ "kovan": {
+ "address": "0x21Fe360f849358e991Ea60Bd5C7569598788f46A"
+ },
+ "hardhat": {
+ "address": "0xf86115c55192beb063C4c494E2C9CFB990235ecF"
+ }
+ },
+ "aUSDC": {
+ "kovan": {
+ "address": "0x4E2e684aA8fB7E15c487F2d922508dBCfdAfC921"
+ },
+ "hardhat": {
+ "address": "0xa8d4DF7C220903a4018C3A81BEc702fb54623bd5"
+ }
+ },
+ "strategyUSDC": {
+ "kovan": {
+ "address": "0x8480DFf825B99622d0598826F5EE3B5d79bA92c5"
+ },
+ "hardhat": {
+ "address": "0x936b5f546a6405012AC1DC4713f29B7CE43Fb4A2"
+ }
+ },
+ "stableDebtUSDT": {
+ "kovan": {
+ "address": "0x953Ae6D846feB7112Be1DD0a2c996CD37c51f127"
+ },
+ "hardhat": {
+ "address": "0x47167e26421017FD2a619D99Cf747b5eB58371B2"
+ }
+ },
+ "variableDebtUSDT": {
+ "kovan": {
+ "address": "0x443005Fad27A870ED9BCF4B048FdD6b79a7d2B15"
+ },
+ "hardhat": {
+ "address": "0xBfd65BbF3fbF0bFB0f0053e092EB690904eC6876"
+ }
+ },
+ "stableDebtWBTC": {
+ "kovan": {
+ "address": "0xa5E61884083c243345449eAD5c70158F016F4df0"
+ },
+ "hardhat": {
+ "address": "0xae18C8d1A389E005faBf3234f5F81C35561c1811"
+ }
+ },
+ "variableDebtWBTC": {
+ "kovan": {
+ "address": "0xFD5194F07E652865671b1a8310Ac54a853985547"
+ },
+ "hardhat": {
+ "address": "0x7B3CAbCa23FafF9f02382Bc5A7BB73D46c2BE1ee"
+ }
+ },
+ "stableDebtWETH": {
+ "kovan": {
+ "address": "0xcb19776e2B69595b6a3Ce4F44acb63e506bd8C1b"
+ },
+ "hardhat": {
+ "address": "0x1A06De035FA3e4339f1a41C9008Ed6ba6c8f2a15"
+ }
+ },
+ "variableDebtWETH": {
+ "kovan": {
+ "address": "0x755d5C1a5d82f26a92dFb793d0Da14eEd8Ec7435"
+ },
+ "hardhat": {
+ "address": "0x61641145904737b907B4e31DBdAd829B606eB111"
+ }
+ },
+ "stableDebtYFI": {
+ "kovan": {
+ "address": "0xd72a6AdE1ba573DA8398ff05426B8450Daeaa3e7"
+ },
+ "hardhat": {
+ "address": "0x3049AA46A60B4253d6Cf122a25bBd26a0CCb6CAd"
+ }
+ },
+ "variableDebtYFI": {
+ "kovan": {
+ "address": "0xa0cE46eA00e4ccE66d93e8465DCEDE0f5470d2A4"
+ },
+ "hardhat": {
+ "address": "0x1Af371fA93aFAB4F461b6f978E7918B79510896A"
+ }
+ },
+ "aUSDT": {
+ "kovan": {
+ "address": "0x5109D69A94c7754251567aD12E0096368f6abcE5"
+ },
+ "hardhat": {
+ "address": "0x6A45383E16554222D9AFf39c4deAd7EF598ddb95"
+ }
+ },
+ "strategyUSDT": {
+ "kovan": {
+ "address": "0x35716131aA6957eEF88c476a6a7e5f3cb6e2B4be"
+ },
+ "hardhat": {
+ "address": "0x08fd990609A0Ed943858a7493c7105E2CC784784"
+ }
+ },
+ "aWBTC": {
+ "kovan": {
+ "address": "0xe53a364A541fC87eecab96365C4BC3b4BA7Ad55f"
+ },
+ "hardhat": {
+ "address": "0xEDE8C583A3fB6DcfC1a991E5B1F9C1b0b29ca60d"
+ }
+ },
+ "strategyWBTC": {
+ "kovan": {
+ "address": "0xD1A6A373A52FddceD8Eb630A6c230f39a53C15Ca"
+ },
+ "hardhat": {
+ "address": "0x763b103B7EFEbb21Acc2b50b134681E0b5ecB247"
+ }
+ },
+ "aWETH": {
+ "kovan": {
+ "address": "0xcBb1352688efC3B5741B60545F0A79B62A629702"
+ },
+ "hardhat": {
+ "address": "0x24aAB62Ae5595aACae2A0fC10aA31006Cb7dC4ef"
+ }
+ },
+ "strategyWETH": {
+ "kovan": {
+ "address": "0xE05AA3A5A5Db7085A5A69402b1f7C033e4BC73d7"
+ },
+ "hardhat": {
+ "address": "0x75e2e836409aF032Fc182F2e9D6212336E2E7026"
+ }
+ },
+ "aYFI": {
+ "kovan": {
+ "address": "0x0C26B8dD7c55c4d090FBCD96c135e12f542Aef83"
+ },
+ "hardhat": {
+ "address": "0xE4b29Db05C1A3749d085E9eF41dC2378eE530dF0"
+ }
+ },
+ "strategyYFI": {
+ "kovan": {
+ "address": "0x4a26cc7002e3ca88D8d3f72b9b6e7C7C4bF8923c"
+ },
+ "hardhat": {
+ "address": "0x8c82e998506DCF9ef46518182DaF18ae962d4b3C"
+ }
+ },
+ "stableDebtZRX": {
+ "kovan": {
+ "address": "0xBA1EFBca9B5b4C7718A4374ec29c1671D972118A"
+ },
+ "hardhat": {
+ "address": "0x929ef1D4eB03724462e59219506CbD5Bcf2Cce38"
+ }
+ },
+ "variableDebtZRX": {
+ "kovan": {
+ "address": "0xfdf0AF23449181c404C15d0aA80D1355DC3FA460"
+ },
+ "hardhat": {
+ "address": "0xDf5E00D37C010cE5FA334234c8E391F82e90fA2e"
+ }
+ },
+ "aZRX": {
+ "kovan": {
+ "address": "0x9952c8EbFf001915a504D3E2B54D3bFD205C104B"
+ },
+ "hardhat": {
+ "address": "0x255AE9d92694fE823D099b42ff8088770B700029"
+ }
+ },
+ "strategyZRX": {
+ "kovan": {
+ "address": "0x2944f4c8b54410b61D3b305651a93547D24d691f"
+ },
+ "hardhat": {
+ "address": "0xaDF23b1cAa6a7B3b077c432794FfF80A4b935cdF"
+ }
}
-}
+}
\ No newline at end of file
diff --git a/hardhat.config.ts b/hardhat.config.ts
new file mode 100644
index 00000000..a6458c51
--- /dev/null
+++ b/hardhat.config.ts
@@ -0,0 +1,117 @@
+import path from 'path';
+import fs from 'fs';
+import {HardhatUserConfig} from 'hardhat/config';
+// @ts-ignore
+import {accounts} from './test-wallets.js';
+import {eEthereumNetwork} from './helpers/types';
+import {BUIDLEREVM_CHAINID, COVERAGE_CHAINID} from './helpers/buidler-constants';
+
+import '@nomiclabs/hardhat-ethers';
+import '@nomiclabs/hardhat-waffle';
+import 'temp-hardhat-etherscan';
+import 'hardhat-gas-reporter';
+import 'hardhat-typechain';
+
+const SKIP_LOAD = process.env.SKIP_LOAD === 'true';
+const DEFAULT_BLOCK_GAS_LIMIT = 12450000;
+const DEFAULT_GAS_MUL = 2;
+const DEFAULT_GAS_PRICE = 2000000000;
+const HARDFORK = 'istanbul';
+const INFURA_KEY = process.env.INFURA_KEY || '';
+const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || '';
+const MNEMONIC_PATH = "m/44'/60'/0'/0";
+const MNEMONIC = process.env.MNEMONIC || '';
+
+// Prevent to load scripts before compilation and typechain
+if (!SKIP_LOAD) {
+ ['misc', 'migrations', 'dev', 'full', 'verifications'].forEach((folder) => {
+ const tasksPath = path.join(__dirname, 'tasks', folder);
+ fs.readdirSync(tasksPath)
+ .filter((pth) => pth.includes('.ts'))
+ .forEach((task) => {
+ require(`${tasksPath}/${task}`);
+ });
+ });
+}
+
+require(`${path.join(__dirname, 'tasks/misc')}/set-bre.ts`);
+
+const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number) => {
+ return {
+ url: `https://${networkName}.infura.io/v3/${INFURA_KEY}`,
+ hardfork: HARDFORK,
+ blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
+ gasMultiplier: DEFAULT_GAS_MUL,
+ gasPrice: DEFAULT_GAS_PRICE,
+ chainId: networkId,
+ accounts: {
+ mnemonic: MNEMONIC,
+ path: MNEMONIC_PATH,
+ initialIndex: 0,
+ count: 20,
+ },
+ };
+};
+
+const buidlerConfig: HardhatUserConfig = {
+ solidity: {
+ version: '0.6.8',
+ settings: {
+ optimizer: {enabled: true, runs: 200},
+ evmVersion: 'istanbul',
+ },
+ },
+ typechain: {
+ outDir: 'types',
+ target: 'ethers-v5',
+ },
+ etherscan: {
+ apiKey: ETHERSCAN_KEY,
+ },
+ mocha: {
+ timeout: 0,
+ },
+ networks: {
+ coverage: {
+ url: 'http://localhost:8555',
+ chainId: COVERAGE_CHAINID,
+ },
+ kovan: getCommonNetworkConfig(eEthereumNetwork.kovan, 42),
+ ropsten: getCommonNetworkConfig(eEthereumNetwork.ropsten, 3),
+ main: getCommonNetworkConfig(eEthereumNetwork.main, 1),
+ hardhat: {
+ hardfork: 'istanbul',
+ blockGasLimit: DEFAULT_BLOCK_GAS_LIMIT,
+ gas: DEFAULT_BLOCK_GAS_LIMIT,
+ gasPrice: 8000000000,
+ chainId: BUIDLEREVM_CHAINID,
+ throwOnTransactionFailures: true,
+ throwOnCallFailures: true,
+ accounts: accounts.map(({secretKey, balance}: {secretKey: string; balance: string}) => ({
+ privateKey: secretKey,
+ balance,
+ })),
+ },
+ buidlerevm_docker: {
+ hardfork: 'istanbul',
+ blockGasLimit: 9500000,
+ gas: 9500000,
+ gasPrice: 8000000000,
+ chainId: BUIDLEREVM_CHAINID,
+ throwOnTransactionFailures: true,
+ throwOnCallFailures: true,
+ url: 'http://localhost:8545',
+ },
+ ganache: {
+ url: 'http://ganache:8545',
+ accounts: {
+ mnemonic: 'fox sight canyon orphan hotel grow hedgehog build bless august weather swarm',
+ path: "m/44'/60'/0'/0",
+ initialIndex: 0,
+ count: 20,
+ },
+ },
+ },
+};
+
+export default buidlerConfig;
diff --git a/helpers/configuration.ts b/helpers/configuration.ts
index 1665d4a0..68c2db4e 100644
--- a/helpers/configuration.ts
+++ b/helpers/configuration.ts
@@ -12,9 +12,10 @@ import {AaveConfig} from '../config/aave';
import {UniswapConfig} from '../config/uniswap';
import {CommonsConfig} from '../config/commons';
import {ZERO_ADDRESS} from './constants';
-import {BRE} from './misc-utils';
+import {DRE} from './misc-utils';
import {tEthereumAddress} from './types';
import {getParamPerNetwork} from './contracts-helpers';
+import {deployWETHMocked} from './contracts-deployments';
export enum ConfigNames {
Commons = 'Commons',
@@ -52,27 +53,33 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets {
- const receivers = [receiver, ZERO_ADDRESS];
- const percentages = ['2000', '8000'];
- return {
- receivers,
- percentages,
- };
-};
-
-export const getGenesisAaveAdmin = async (config: ICommonConfiguration) => {
- const currentNetwork = BRE.network.name;
- const targetAddress = getParamPerNetwork(config.AaveAdmin, currentNetwork);
+export const getGenesisPoolAdmin = async (
+ config: ICommonConfiguration
+): Promise => {
+ const currentNetwork = DRE.network.name;
+ const targetAddress = getParamPerNetwork(config.PoolAdmin, currentNetwork);
if (targetAddress) {
return targetAddress;
}
const addressList = await Promise.all(
- (await BRE.ethers.getSigners()).map((signer) => signer.getAddress())
+ (await DRE.ethers.getSigners()).map((signer) => signer.getAddress())
);
- const addressIndex = config.AaveAdminIndex;
+ const addressIndex = config.PoolAdminIndex;
+ return addressList[addressIndex];
+};
+
+export const getEmergencyAdmin = async (
+ config: ICommonConfiguration
+): Promise => {
+ const currentNetwork = DRE.network.name;
+ const targetAddress = getParamPerNetwork(config.EmergencyAdmin, currentNetwork);
+ if (targetAddress) {
+ return targetAddress;
+ }
+ const addressList = await Promise.all(
+ (await DRE.ethers.getSigners()).map((signer) => signer.getAddress())
+ );
+ const addressIndex = config.EmergencyAdminIndex;
return addressList[addressIndex];
};
@@ -80,3 +87,16 @@ export const getATokenDomainSeparatorPerNetwork = (
network: eEthereumNetwork,
config: ICommonConfiguration
): tEthereumAddress => getParamPerNetwork(config.ATokenDomainSeparator, network);
+
+export const getWethAddress = async (config: ICommonConfiguration) => {
+ const currentNetwork = DRE.network.name;
+ const wethAddress = getParamPerNetwork(config.WETH, currentNetwork);
+ if (wethAddress) {
+ return wethAddress;
+ }
+ if (currentNetwork.includes('main')) {
+ throw new Error('WETH not set at mainnet configuration.');
+ }
+ const weth = await deployWETHMocked();
+ return weth.address;
+};
diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts
index 90561b28..0887e9b7 100644
--- a/helpers/contracts-deployments.ts
+++ b/helpers/contracts-deployments.ts
@@ -1,5 +1,5 @@
import {Contract} from 'ethers';
-import {BRE} from './misc-utils';
+import {DRE} from './misc-utils';
import {
tEthereumAddress,
eContractid,
@@ -9,20 +9,21 @@ import {
iMultiPoolsAssets,
IReserveParams,
PoolConfiguration,
+ eEthereumNetwork,
} from './types';
import {MintableErc20 as MintableERC20} from '../types/MintableErc20';
-import {readArtifact} from '@nomiclabs/buidler/plugins';
import {MockContract} from 'ethereum-waffle';
import {getReservesConfigByPool} from './configuration';
import {getFirstSigner} from './contracts-getters';
import {ZERO_ADDRESS} from './constants';
import {
- AaveProtocolTestHelpersFactory,
+ AaveProtocolDataProviderFactory,
ATokenFactory,
ATokensAndRatesHelperFactory,
ChainlinkProxyPriceProviderFactory,
DefaultReserveInterestRateStrategyFactory,
+ DelegationAwareATokenFactory,
InitializableAdminUpgradeabilityProxyFactory,
LendingPoolAddressesProviderFactory,
LendingPoolAddressesProviderRegistryFactory,
@@ -31,6 +32,7 @@ import {
LendingPoolFactory,
LendingPoolLibraryAddresses,
LendingRateOracleFactory,
+ MintableDelegationErc20Factory,
MintableErc20Factory,
MockAggregatorFactory,
MockATokenFactory,
@@ -39,15 +41,30 @@ import {
MockVariableDebtTokenFactory,
PriceOracleFactory,
ReserveLogicFactory,
+ SelfdestructTransferFactory,
StableDebtTokenFactory,
VariableDebtTokenFactory,
WalletBalanceProviderFactory,
+ Weth9MockedFactory,
+ WethGatewayFactory,
} from '../types';
-import {withSaveAndVerify, registerContractInJsonDb, linkBytecode} from './contracts-helpers';
+import {
+ withSaveAndVerify,
+ registerContractInJsonDb,
+ linkBytecode,
+ insertContractAddressInDb,
+} from './contracts-helpers';
import {StableAndVariableTokensHelperFactory} from '../types/StableAndVariableTokensHelperFactory';
-import {MockStableDebtToken} from '../types/MockStableDebtToken';
-import {MockVariableDebtToken} from '../types/MockVariableDebtToken';
+import {MintableDelegationErc20} from '../types/MintableDelegationErc20';
+import {readArtifact as buidlerReadArtifact} from '@nomiclabs/buidler/plugins';
+import {HardhatRuntimeEnvironment} from 'hardhat/types';
+const readArtifact = async (id: string) => {
+ if (DRE.network.name === eEthereumNetwork.buidlerevm) {
+ return buidlerReadArtifact(DRE.config.paths.artifacts, id);
+ }
+ return (DRE as HardhatRuntimeEnvironment).artifacts.readArtifact(id);
+};
export const deployLendingPoolAddressesProvider = async (verify?: boolean) =>
withSaveAndVerify(
await new LendingPoolAddressesProviderFactory(await getFirstSigner()).deploy(),
@@ -64,13 +81,21 @@ export const deployLendingPoolAddressesProviderRegistry = async (verify?: boolea
verify
);
-export const deployLendingPoolConfigurator = async (verify?: boolean) =>
- withSaveAndVerify(
- await new LendingPoolConfiguratorFactory(await getFirstSigner()).deploy(),
+export const deployLendingPoolConfigurator = async (verify?: boolean) => {
+ const lendingPoolConfiguratorImpl = await new LendingPoolConfiguratorFactory(
+ await getFirstSigner()
+ ).deploy();
+ await insertContractAddressInDb(
+ eContractid.LendingPoolConfiguratorImpl,
+ lendingPoolConfiguratorImpl.address
+ );
+ return withSaveAndVerify(
+ lendingPoolConfiguratorImpl,
eContractid.LendingPoolConfigurator,
[],
verify
);
+};
export const deployReserveLogicLibrary = async (verify?: boolean) =>
withSaveAndVerify(
@@ -81,16 +106,13 @@ export const deployReserveLogicLibrary = async (verify?: boolean) =>
);
export const deployGenericLogic = async (reserveLogic: Contract, verify?: boolean) => {
- const genericLogicArtifact = await readArtifact(
- BRE.config.paths.artifacts,
- eContractid.GenericLogic
- );
+ const genericLogicArtifact = await readArtifact(eContractid.GenericLogic);
const linkedGenericLogicByteCode = linkBytecode(genericLogicArtifact, {
[eContractid.ReserveLogic]: reserveLogic.address,
});
- const genericLogicFactory = await BRE.ethers.getContractFactory(
+ const genericLogicFactory = await DRE.ethers.getContractFactory(
genericLogicArtifact.abi,
linkedGenericLogicByteCode
);
@@ -104,17 +126,14 @@ export const deployValidationLogic = async (
genericLogic: Contract,
verify?: boolean
) => {
- const validationLogicArtifact = await readArtifact(
- BRE.config.paths.artifacts,
- eContractid.ValidationLogic
- );
+ const validationLogicArtifact = await readArtifact(eContractid.ValidationLogic);
const linkedValidationLogicByteCode = linkBytecode(validationLogicArtifact, {
[eContractid.ReserveLogic]: reserveLogic.address,
[eContractid.GenericLogic]: genericLogic.address,
});
- const validationLogicFactory = await BRE.ethers.getContractFactory(
+ const validationLogicFactory = await DRE.ethers.getContractFactory(
validationLogicArtifact.abi,
linkedValidationLogicByteCode
);
@@ -150,12 +169,9 @@ export const deployAaveLibraries = async (
export const deployLendingPool = async (verify?: boolean) => {
const libraries = await deployAaveLibraries(verify);
- return withSaveAndVerify(
- await new LendingPoolFactory(libraries, await getFirstSigner()).deploy(),
- eContractid.LendingPool,
- [],
- verify
- );
+ const lendingPoolImpl = await new LendingPoolFactory(libraries, await getFirstSigner()).deploy();
+ await insertContractAddressInDb(eContractid.LendingPoolImpl, lendingPoolImpl.address);
+ return withSaveAndVerify(lendingPoolImpl, eContractid.LendingPool, [], verify);
};
export const deployPriceOracle = async (verify?: boolean) =>
@@ -183,7 +199,7 @@ export const deployMockAggregator = async (price: tStringTokenSmallUnits, verify
);
export const deployChainlinkProxyPriceProvider = async (
- args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress],
+ args: [tEthereumAddress[], tEthereumAddress[], tEthereumAddress, tEthereumAddress],
verify?: boolean
) =>
withSaveAndVerify(
@@ -194,8 +210,15 @@ export const deployChainlinkProxyPriceProvider = async (
);
export const deployLendingPoolCollateralManager = async (verify?: boolean) => {
+ const collateralManagerImpl = await new LendingPoolCollateralManagerFactory(
+ await getFirstSigner()
+ ).deploy();
+ await insertContractAddressInDb(
+ eContractid.LendingPoolCollateralManagerImpl,
+ collateralManagerImpl.address
+ );
return withSaveAndVerify(
- await new LendingPoolCollateralManagerFactory(await getFirstSigner()).deploy(),
+ collateralManagerImpl,
eContractid.LendingPoolCollateralManager,
[],
verify
@@ -232,13 +255,13 @@ export const deployWalletBalancerProvider = async (
verify
);
-export const deployAaveProtocolTestHelpers = async (
+export const deployAaveProtocolDataProvider = async (
addressesProvider: tEthereumAddress,
verify?: boolean
) =>
withSaveAndVerify(
- await new AaveProtocolTestHelpersFactory(await getFirstSigner()).deploy(addressesProvider),
- eContractid.AaveProtocolTestHelpers,
+ await new AaveProtocolDataProviderFactory(await getFirstSigner()).deploy(addressesProvider),
+ eContractid.AaveProtocolDataProvider,
[addressesProvider],
verify
);
@@ -254,6 +277,16 @@ export const deployMintableERC20 = async (
verify
);
+export const deployMintableDelegationERC20 = async (
+ args: [string, string, string],
+ verify?: boolean
+): Promise =>
+ withSaveAndVerify(
+ await new MintableDelegationErc20Factory(await getFirstSigner()).deploy(...args),
+ eContractid.MintableDelegationERC20,
+ args,
+ verify
+ );
export const deployDefaultReserveInterestRateStrategy = async (
args: [tEthereumAddress, string, string, string, string, string],
verify: boolean
@@ -313,6 +346,32 @@ export const deployGenericAToken = async (
);
};
+export const deployDelegationAwareAToken = async (
+ [poolAddress, underlyingAssetAddress, name, symbol, incentivesController]: [
+ tEthereumAddress,
+ tEthereumAddress,
+ string,
+ string,
+ tEthereumAddress
+ ],
+ verify: boolean
+) => {
+ const args: [
+ tEthereumAddress,
+ tEthereumAddress,
+ tEthereumAddress,
+ string,
+ string,
+ tEthereumAddress
+ ] = [poolAddress, underlyingAssetAddress, ZERO_ADDRESS, name, symbol, incentivesController];
+ return withSaveAndVerify(
+ await new DelegationAwareATokenFactory(await getFirstSigner()).deploy(...args),
+ eContractid.AToken,
+ args,
+ verify
+ );
+};
+
export const deployAllMockTokens = async (verify?: boolean) => {
const tokens: {[symbol: string]: MockContract | MintableERC20} = {};
@@ -342,7 +401,7 @@ export const deployMockTokens = async (config: PoolConfiguration, verify?: boole
const configData = config.ReservesConfig;
- for (const tokenSymbol of Object.keys(config.ReserveSymbols)) {
+ for (const tokenSymbol of Object.keys(configData)) {
tokens[tokenSymbol] = await deployMintableERC20(
[
tokenSymbol,
@@ -379,24 +438,43 @@ export const deployATokensAndRatesHelper = async (
verify
);
+export const deployWETHGateway = async (
+ args: [tEthereumAddress, tEthereumAddress],
+ verify?: boolean
+) =>
+ withSaveAndVerify(
+ await new WethGatewayFactory(await getFirstSigner()).deploy(...args),
+ eContractid.WETHGateway,
+ args,
+ verify
+ );
+
export const deployMockStableDebtToken = async (
args: [tEthereumAddress, tEthereumAddress, string, string, tEthereumAddress],
verify?: boolean
) =>
withSaveAndVerify(
await new MockStableDebtTokenFactory(await getFirstSigner()).deploy(...args),
- eContractid.ATokensAndRatesHelper,
+ eContractid.MockStableDebtToken,
args,
verify
);
+export const deployWETHMocked = async (verify?: boolean) =>
+ withSaveAndVerify(
+ await new Weth9MockedFactory(await getFirstSigner()).deploy(),
+ eContractid.WETHMocked,
+ [],
+ verify
+ );
+
export const deployMockVariableDebtToken = async (
args: [tEthereumAddress, tEthereumAddress, string, string, tEthereumAddress],
verify?: boolean
) =>
withSaveAndVerify(
await new MockVariableDebtTokenFactory(await getFirstSigner()).deploy(...args),
- eContractid.ATokensAndRatesHelper,
+ eContractid.MockVariableDebtToken,
args,
verify
);
@@ -407,7 +485,15 @@ export const deployMockAToken = async (
) =>
withSaveAndVerify(
await new MockATokenFactory(await getFirstSigner()).deploy(...args),
- eContractid.ATokensAndRatesHelper,
+ eContractid.MockAToken,
args,
verify
);
+
+export const deploySelfdestructTransferMock = async (verify?: boolean) =>
+ withSaveAndVerify(
+ await new SelfdestructTransferFactory(await getFirstSigner()).deploy(),
+ eContractid.SelfdestructTransferMock,
+ [],
+ verify
+ );
diff --git a/helpers/contracts-getters.ts b/helpers/contracts-getters.ts
index 7fa9fdee..fa220c28 100644
--- a/helpers/contracts-getters.ts
+++ b/helpers/contracts-getters.ts
@@ -1,11 +1,13 @@
import {
- AaveProtocolTestHelpersFactory,
+ AaveProtocolDataProviderFactory,
ATokenFactory,
ATokensAndRatesHelperFactory,
DefaultReserveInterestRateStrategyFactory,
GenericLogicFactory,
+ InitializableAdminUpgradeabilityProxyFactory,
LendingPoolAddressesProviderFactory,
LendingPoolAddressesProviderRegistryFactory,
+ LendingPoolCollateralManagerFactory,
LendingPoolConfiguratorFactory,
LendingPoolFactory,
LendingRateOracleFactory,
@@ -16,21 +18,27 @@ import {
MockVariableDebtTokenFactory,
PriceOracleFactory,
ReserveLogicFactory,
+ SelfdestructTransferFactory,
StableAndVariableTokensHelperFactory,
StableDebtTokenFactory,
VariableDebtTokenFactory,
+ WalletBalanceProviderFactory,
+ Weth9Factory,
+ Weth9MockedFactory,
+ WethGatewayFactory,
} from '../types';
import {Ierc20DetailedFactory} from '../types/Ierc20DetailedFactory';
+import {UpgradeabilityProxy} from '../types/UpgradeabilityProxy';
import {MockTokenMap} from './contracts-helpers';
-import {BRE, getDb} from './misc-utils';
+import {DRE, getDb} from './misc-utils';
import {eContractid, PoolConfiguration, tEthereumAddress, TokenContractId} from './types';
-export const getFirstSigner = async () => (await BRE.ethers.getSigners())[0];
+export const getFirstSigner = async () => (await DRE.ethers.getSigners())[0];
export const getLendingPoolAddressesProvider = async (address?: tEthereumAddress) =>
await LendingPoolAddressesProviderFactory.connect(
address ||
- (await getDb().get(`${eContractid.LendingPoolAddressesProvider}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.LendingPoolAddressesProvider}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
@@ -38,7 +46,7 @@ export const getLendingPoolAddressesProvider = async (address?: tEthereumAddress
export const getLendingPoolConfiguratorProxy = async (address?: tEthereumAddress) => {
return await LendingPoolConfiguratorFactory.connect(
address ||
- (await getDb().get(`${eContractid.LendingPoolConfigurator}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.LendingPoolConfigurator}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
@@ -47,55 +55,55 @@ export const getLendingPoolConfiguratorProxy = async (address?: tEthereumAddress
export const getLendingPool = async (address?: tEthereumAddress) =>
await LendingPoolFactory.connect(
address ||
- (await getDb().get(`${eContractid.LendingPool}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.LendingPool}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getPriceOracle = async (address?: tEthereumAddress) =>
await PriceOracleFactory.connect(
address ||
- (await getDb().get(`${eContractid.PriceOracle}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.PriceOracle}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getAToken = async (address?: tEthereumAddress) =>
await ATokenFactory.connect(
- address || (await getDb().get(`${eContractid.AToken}.${BRE.network.name}`).value()).address,
+ address || (await getDb().get(`${eContractid.AToken}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getStableDebtToken = async (address?: tEthereumAddress) =>
await StableDebtTokenFactory.connect(
address ||
- (await getDb().get(`${eContractid.StableDebtToken}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.StableDebtToken}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getVariableDebtToken = async (address?: tEthereumAddress) =>
await VariableDebtTokenFactory.connect(
address ||
- (await getDb().get(`${eContractid.VariableDebtToken}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.VariableDebtToken}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getMintableErc20 = async (address: tEthereumAddress) =>
await MintableErc20Factory.connect(
address ||
- (await getDb().get(`${eContractid.MintableERC20}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.MintableERC20}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getIErc20Detailed = async (address: tEthereumAddress) =>
await Ierc20DetailedFactory.connect(
address ||
- (await getDb().get(`${eContractid.IERC20Detailed}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.IERC20Detailed}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
-export const getAaveProtocolTestHelpers = async (address?: tEthereumAddress) =>
- await AaveProtocolTestHelpersFactory.connect(
+export const getAaveProtocolDataProvider = async (address?: tEthereumAddress) =>
+ await AaveProtocolDataProviderFactory.connect(
address ||
- (await getDb().get(`${eContractid.AaveProtocolTestHelpers}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.AaveProtocolDataProvider}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
@@ -105,7 +113,7 @@ export const getInterestRateStrategy = async (address?: tEthereumAddress) =>
address ||
(
await getDb()
- .get(`${eContractid.DefaultReserveInterestRateStrategy}.${BRE.network.name}`)
+ .get(`${eContractid.DefaultReserveInterestRateStrategy}.${DRE.network.name}`)
.value()
).address,
await getFirstSigner()
@@ -114,7 +122,7 @@ export const getInterestRateStrategy = async (address?: tEthereumAddress) =>
export const getMockFlashLoanReceiver = async (address?: tEthereumAddress) =>
await MockFlashLoanReceiverFactory.connect(
address ||
- (await getDb().get(`${eContractid.MockFlashLoanReceiver}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.MockFlashLoanReceiver}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
@@ -122,17 +130,17 @@ export const getMockFlashLoanReceiver = async (address?: tEthereumAddress) =>
export const getLendingRateOracle = async (address?: tEthereumAddress) =>
await LendingRateOracleFactory.connect(
address ||
- (await getDb().get(`${eContractid.LendingRateOracle}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.LendingRateOracle}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getMockedTokens = async (config: PoolConfiguration) => {
- const tokenSymbols = config.ReserveSymbols;
+ const tokenSymbols = Object.keys(config.ReservesConfig);
const db = getDb();
const tokens: MockTokenMap = await tokenSymbols.reduce>(
async (acc, tokenSymbol) => {
const accumulator = await acc;
- const address = db.get(`${tokenSymbol.toUpperCase()}.${BRE.network.name}`).value().address;
+ const address = db.get(`${tokenSymbol.toUpperCase()}.${DRE.network.name}`).value().address;
accumulator[tokenSymbol] = await getMintableErc20(address);
return Promise.resolve(acc);
},
@@ -146,7 +154,7 @@ export const getAllMockedTokens = async () => {
const tokens: MockTokenMap = await Object.keys(TokenContractId).reduce>(
async (acc, tokenSymbol) => {
const accumulator = await acc;
- const address = db.get(`${tokenSymbol.toUpperCase()}.${BRE.network.name}`).value().address;
+ const address = db.get(`${tokenSymbol.toUpperCase()}.${DRE.network.name}`).value().address;
accumulator[tokenSymbol] = await getMintableErc20(address);
return Promise.resolve(acc);
},
@@ -187,7 +195,7 @@ export const getLendingPoolAddressesProviderRegistry = async (address?: tEthereu
address ||
(
await getDb()
- .get(`${eContractid.LendingPoolAddressesProviderRegistry}.${BRE.network.name}`)
+ .get(`${eContractid.LendingPoolAddressesProviderRegistry}.${DRE.network.name}`)
.value()
).address,
await getFirstSigner()
@@ -196,14 +204,14 @@ export const getLendingPoolAddressesProviderRegistry = async (address?: tEthereu
export const getReserveLogic = async (address?: tEthereumAddress) =>
await ReserveLogicFactory.connect(
address ||
- (await getDb().get(`${eContractid.ReserveLogic}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.ReserveLogic}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getGenericLogic = async (address?: tEthereumAddress) =>
await GenericLogicFactory.connect(
address ||
- (await getDb().get(`${eContractid.GenericLogic}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.GenericLogic}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
@@ -212,7 +220,7 @@ export const getStableAndVariableTokensHelper = async (address?: tEthereumAddres
address ||
(
await getDb()
- .get(`${eContractid.StableAndVariableTokensHelper}.${BRE.network.name}`)
+ .get(`${eContractid.StableAndVariableTokensHelper}.${DRE.network.name}`)
.value()
).address,
await getFirstSigner()
@@ -221,27 +229,97 @@ export const getStableAndVariableTokensHelper = async (address?: tEthereumAddres
export const getATokensAndRatesHelper = async (address?: tEthereumAddress) =>
await ATokensAndRatesHelperFactory.connect(
address ||
- (await getDb().get(`${eContractid.ATokensAndRatesHelper}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.ATokensAndRatesHelper}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
+export const getWETHGateway = async (address?: tEthereumAddress) =>
+ await WethGatewayFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.WETHGateway}.${DRE.network.name}`).value()).address,
+ await getFirstSigner()
+ );
+
+export const getWETHMocked = async (address?: tEthereumAddress) =>
+ await Weth9MockedFactory.connect(
+ address || (await getDb().get(`${eContractid.WETHMocked}.${DRE.network.name}`).value()).address,
+ await getFirstSigner()
+ );
+
export const getMockAToken = async (address?: tEthereumAddress) =>
await MockATokenFactory.connect(
- address || (await getDb().get(`${eContractid.MockAToken}.${BRE.network.name}`).value()).address,
+ address || (await getDb().get(`${eContractid.MockAToken}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
export const getMockVariableDebtToken = async (address?: tEthereumAddress) =>
await MockVariableDebtTokenFactory.connect(
address ||
- (await getDb().get(`${eContractid.MockVariableDebtToken}.${BRE.network.name}`).value())
+ (await getDb().get(`${eContractid.MockVariableDebtToken}.${DRE.network.name}`).value())
.address,
await getFirstSigner()
);
+
export const getMockStableDebtToken = async (address?: tEthereumAddress) =>
await MockStableDebtTokenFactory.connect(
address ||
- (await getDb().get(`${eContractid.MockStableDebtToken}.${BRE.network.name}`).value()).address,
+ (await getDb().get(`${eContractid.MockStableDebtToken}.${DRE.network.name}`).value()).address,
await getFirstSigner()
);
+
+export const getSelfdestructTransferMock = async (address?: tEthereumAddress) =>
+ await SelfdestructTransferFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.SelfdestructTransferMock}.${DRE.network.name}`).value())
+ .address,
+ await getFirstSigner()
+ );
+
+export const getProxy = async (address: tEthereumAddress) =>
+ await InitializableAdminUpgradeabilityProxyFactory.connect(address, await getFirstSigner());
+
+export const getLendingPoolImpl = async (address?: tEthereumAddress) =>
+ await LendingPoolFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.LendingPoolImpl}.${DRE.network.name}`).value()).address,
+ await getFirstSigner()
+ );
+
+export const getLendingPoolConfiguratorImpl = async (address?: tEthereumAddress) =>
+ await LendingPoolConfiguratorFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.LendingPoolConfiguratorImpl}.${DRE.network.name}`).value())
+ .address,
+ await getFirstSigner()
+ );
+
+export const getLendingPoolCollateralManagerImpl = async (address?: tEthereumAddress) =>
+ await LendingPoolCollateralManagerFactory.connect(
+ address ||
+ (
+ await getDb()
+ .get(`${eContractid.LendingPoolCollateralManagerImpl}.${DRE.network.name}`)
+ .value()
+ ).address,
+ await getFirstSigner()
+ );
+
+export const getWalletProvider = async (address?: tEthereumAddress) =>
+ await WalletBalanceProviderFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.WalletBalanceProvider}.${DRE.network.name}`).value())
+ .address,
+ await getFirstSigner()
+ );
+
+export const getLendingPoolCollateralManager = async (address?: tEthereumAddress) =>
+ await LendingPoolCollateralManagerFactory.connect(
+ address ||
+ (await getDb().get(`${eContractid.LendingPoolCollateralManager}.${DRE.network.name}`).value())
+ .address,
+ await getFirstSigner()
+ );
+
+export const getAddressById = async (id: string) =>
+ (await getDb().get(`${id}.${DRE.network.name}`).value()).address;
diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts
index cbe2b69c..ba8ee5d1 100644
--- a/helpers/contracts-helpers.ts
+++ b/helpers/contracts-helpers.ts
@@ -2,7 +2,7 @@ import {Contract, Signer, utils, ethers} from 'ethers';
import {signTypedData_v4} from 'eth-sig-util';
import {fromRpcSig, ECDSASignature} from 'ethereumjs-util';
import BigNumber from 'bignumber.js';
-import {getDb, BRE, waitForTx} from './misc-utils';
+import {getDb, DRE, waitForTx} from './misc-utils';
import {
tEthereumAddress,
eContractid,
@@ -13,15 +13,16 @@ import {
iParamsPerPool,
} from './types';
import {MintableErc20 as MintableERC20} from '../types/MintableErc20';
-import {Artifact} from '@nomiclabs/buidler/types';
+import {Artifact} from 'hardhat/types';
+import {Artifact as BuidlerArtifact} from '@nomiclabs/buidler/types';
import {verifyContract} from './etherscan-verification';
import {getIErc20Detailed} from './contracts-getters';
export type MockTokenMap = {[symbol: string]: MintableERC20};
export const registerContractInJsonDb = async (contractId: string, contractInstance: Contract) => {
- const currentNetwork = BRE.network.name;
- if (currentNetwork !== 'buidlerevm' && !currentNetwork.includes('coverage')) {
+ const currentNetwork = DRE.network.name;
+ if (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage')) {
console.log(`*** ${contractId} ***\n`);
console.log(`Network: ${currentNetwork}`);
console.log(`tx: ${contractInstance.deployTransaction.hash}`);
@@ -43,19 +44,26 @@ export const registerContractInJsonDb = async (contractId: string, contractInsta
export const insertContractAddressInDb = async (id: eContractid, address: tEthereumAddress) =>
await getDb()
- .set(`${id}.${BRE.network.name}`, {
+ .set(`${id}.${DRE.network.name}`, {
+ address,
+ })
+ .write();
+
+export const rawInsertContractAddressInDb = async (id: string, address: tEthereumAddress) =>
+ await getDb()
+ .set(`${id}.${DRE.network.name}`, {
address,
})
.write();
export const getEthersSigners = async (): Promise =>
- await Promise.all(await BRE.ethers.getSigners());
+ await Promise.all(await DRE.ethers.getSigners());
export const getEthersSignersAddresses = async (): Promise =>
- await Promise.all((await BRE.ethers.getSigners()).map((signer) => signer.getAddress()));
+ await Promise.all((await DRE.ethers.getSigners()).map((signer) => signer.getAddress()));
export const getCurrentBlock = async () => {
- return BRE.ethers.provider.getBlockNumber();
+ return DRE.ethers.provider.getBlockNumber();
};
export const decodeAbiNumber = (data: string): number =>
@@ -65,7 +73,7 @@ export const deployContract = async (
contractName: string,
args: any[]
): Promise => {
- const contract = (await (await BRE.ethers.getContractFactory(contractName)).deploy(
+ const contract = (await (await DRE.ethers.getContractFactory(contractName)).deploy(
...args
)) as ContractType;
await waitForTx(contract.deployTransaction);
@@ -82,7 +90,7 @@ export const withSaveAndVerify = async (
await waitForTx(instance.deployTransaction);
await registerContractInJsonDb(id, instance);
if (verify) {
- await verifyContract(id, instance.address, args);
+ await verifyContract(instance.address, args);
}
return instance;
};
@@ -90,9 +98,9 @@ export const withSaveAndVerify = async (
export const getContract = async (
contractName: string,
address: string
-): Promise => (await BRE.ethers.getContractAt(contractName, address)) as ContractType;
+): Promise => (await DRE.ethers.getContractAt(contractName, address)) as ContractType;
-export const linkBytecode = (artifact: Artifact, libraries: any) => {
+export const linkBytecode = (artifact: BuidlerArtifact | Artifact, libraries: any) => {
let bytecode = artifact.bytecode;
for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
@@ -124,14 +132,14 @@ export const getParamPerNetwork = (
return coverage;
case eEthereumNetwork.buidlerevm:
return buidlerevm;
+ case eEthereumNetwork.hardhat:
+ return buidlerevm;
case eEthereumNetwork.kovan:
return kovan;
case eEthereumNetwork.ropsten:
return ropsten;
case eEthereumNetwork.main:
return main;
- default:
- return main;
}
};
diff --git a/helpers/etherscan-verification.ts b/helpers/etherscan-verification.ts
index a7393f0a..902cb2fe 100644
--- a/helpers/etherscan-verification.ts
+++ b/helpers/etherscan-verification.ts
@@ -1,41 +1,31 @@
import {exit} from 'process';
import fs from 'fs';
-import globby from 'globby';
import {file} from 'tmp-promise';
-import {BRE} from './misc-utils';
-
-const listSolidityFiles = (dir: string) => globby(`${dir}/**/*.sol`);
+import {DRE} from './misc-utils';
const fatalErrors = [
`The address provided as argument contains a contract, but its bytecode`,
`Daily limit of 100 source code submissions reached`,
+ `has no bytecode. Is the contract deployed to this network`,
+ `The constructor for`,
];
+const okErrors = [`Contract source code already verified`];
+
+const unableVerifyError = 'Fail - Unable to verify';
+
export const SUPPORTED_ETHERSCAN_NETWORKS = ['main', 'ropsten', 'kovan'];
-export const getEtherscanPath = async (contractName: string) => {
- const paths = await listSolidityFiles(BRE.config.paths.sources);
- const path = paths.find((p) => p.includes(contractName));
- if (!path) {
- throw new Error(
- `Contract path not found for ${contractName}. Check if smart contract file is equal to contractName input.`
- );
- }
-
- return `${path}:${contractName}`;
-};
-
function delay(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export const verifyContract = async (
- contractName: string,
address: string,
constructorArguments: (string | string[])[],
libraries?: string
) => {
- const currentNetwork = BRE.network.name;
+ const currentNetwork = DRE.network.name;
if (!process.env.ETHERSCAN_KEY) {
throw Error('Missing process.env.ETHERSCAN_KEY.');
@@ -45,14 +35,13 @@ export const verifyContract = async (
`Current network ${currentNetwork} not supported. Please change to one of the next networks: ${SUPPORTED_ETHERSCAN_NETWORKS.toString()}`
);
}
- const etherscanPath = await getEtherscanPath(contractName);
try {
console.log(
'[ETHERSCAN][WARNING] Delaying Etherscan verification due their API can not find newly deployed contracts'
);
const msDelay = 3000;
- const times = 60;
+ const times = 4;
// Write a temporal file to host complex parameters for buidler-etherscan https://github.com/nomiclabs/buidler/tree/development/packages/buidler-etherscan#complex-arguments
const {fd, path, cleanup} = await file({
prefix: 'verify-params-',
@@ -61,10 +50,10 @@ export const verifyContract = async (
fs.writeSync(fd, `module.exports = ${JSON.stringify([...constructorArguments])};`);
const params = {
- contractName: etherscanPath,
address: address,
libraries,
constructorArgs: path,
+ relatedSources: true,
};
await runTaskWithRetry('verify', params, times, msDelay, cleanup);
} catch (error) {}
@@ -81,8 +70,13 @@ export const runTaskWithRetry = async (
await delay(msDelay);
try {
- if (times) {
- await BRE.run(task, params);
+ if (times > 1) {
+ await DRE.run(task, params);
+ cleanup();
+ } else if (times === 1) {
+ console.log('[ETHERSCAN][WARNING] Trying to verify via uploading all sources.');
+ delete params.relatedSources;
+ await DRE.run(task, params);
cleanup();
} else {
cleanup();
@@ -92,22 +86,32 @@ export const runTaskWithRetry = async (
}
} catch (error) {
counter--;
- console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`);
- console.error('[ETHERSCAN][[ERROR]', error.message);
- if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) {
- console.error(
- '[ETHERSCAN][[ERROR] Fatal error detected, skip retries and resume deployment.'
- );
+ if (okErrors.some((okReason) => error.message.includes(okReason))) {
+ console.info('[ETHERSCAN][INFO] Skipping due OK response: ', error.message);
return;
}
+ if (fatalErrors.some((fatalError) => error.message.includes(fatalError))) {
+ console.error(
+ '[ETHERSCAN][ERROR] Fatal error detected, skip retries and resume deployment.',
+ error.message
+ );
+ return;
+ }
+ console.error('[ETHERSCAN][ERROR]', error.message);
+ console.log();
+ console.info(`[ETHERSCAN][[INFO] Retrying attemps: ${counter}.`);
+ if (error.message.includes(unableVerifyError)) {
+ console.log('[ETHERSCAN][WARNING] Trying to verify via uploading all sources.');
+ delete params.relatedSources;
+ }
await runTaskWithRetry(task, params, counter, msDelay, cleanup);
}
};
export const checkVerification = () => {
- const currentNetwork = BRE.network.name;
+ const currentNetwork = DRE.network.name;
if (!process.env.ETHERSCAN_KEY) {
console.error('Missing process.env.ETHERSCAN_KEY.');
exit(3);
diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts
index b33e3b9a..2391f26f 100644
--- a/helpers/init-helpers.ts
+++ b/helpers/init-helpers.ts
@@ -1,6 +1,6 @@
-import {iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types';
+import {eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress} from './types';
import {LendingPoolConfigurator} from '../types/LendingPoolConfigurator';
-import {AaveProtocolTestHelpers} from '../types/AaveProtocolTestHelpers';
+import {AaveProtocolDataProvider} from '../types/AaveProtocolDataProvider';
import {
deployATokensAndRatesHelper,
deployStableAndVariableTokensHelper,
@@ -11,6 +11,7 @@ import {
getLendingPoolAddressesProvider,
getStableAndVariableTokensHelper,
} from './contracts-getters';
+import {insertContractAddressInDb, rawInsertContractAddressInDb} from './contracts-helpers';
export const initReservesByHelper = async (
reservesParams: iMultiPoolsAssets,
@@ -24,7 +25,7 @@ export const initReservesByHelper = async (
const addressProvider = await getLendingPoolAddressesProvider();
// Set aTokenAndRatesDeployer as temporal admin
- await waitForTx(await addressProvider.setAaveAdmin(atokenAndRatesDeployer.address));
+ await waitForTx(await addressProvider.setPoolAdmin(atokenAndRatesDeployer.address));
// CHUNK CONFIGURATION
const tokensChunks = 4;
@@ -89,12 +90,15 @@ export const initReservesByHelper = async (
reservesDecimals.push(reserveDecimals);
}
- // Deploy stable and variable deployers
+ // Deploy stable and variable deployers and save implementations
const tx1 = await waitForTx(
await stableAndVariableDeployer.initDeployment(tokens, symbols, incentivesController)
);
-
- // Deploy atokens and rate strategies
+ tx1.events?.forEach((event, index) => {
+ rawInsertContractAddressInDb(`stableDebt${symbols[index]}`, event?.args?.stableToken);
+ rawInsertContractAddressInDb(`variableDebt${symbols[index]}`, event?.args?.variableToken);
+ });
+ // Deploy atokens and rate strategies and save implementations
const tx2 = await waitForTx(
await atokenAndRatesDeployer.initDeployment(
tokens,
@@ -103,6 +107,11 @@ export const initReservesByHelper = async (
incentivesController
)
);
+ tx2.events?.forEach((event, index) => {
+ rawInsertContractAddressInDb(`a${symbols[index]}`, event?.args?.aToken);
+ rawInsertContractAddressInDb(`strategy${symbols[index]}`, event?.args?.strategy);
+ });
+
console.log(` - Deployed aToken, DebtTokens and Strategy for: ${symbols.join(', ')} `);
const stableTokens: string[] = tx1.events?.map((e) => e.args?.stableToken) || [];
const variableTokens: string[] = tx1.events?.map((e) => e.args?.variableToken) || [];
@@ -140,7 +149,7 @@ export const initReservesByHelper = async (
}
// Set deployer back as admin
- await waitForTx(await addressProvider.setAaveAdmin(admin));
+ await waitForTx(await addressProvider.setPoolAdmin(admin));
};
export const getPairsTokenAggregator = (
@@ -173,7 +182,7 @@ export const getPairsTokenAggregator = (
export const enableReservesToBorrowByHelper = async (
reservesParams: iMultiPoolsAssets,
tokenAddresses: {[symbol: string]: tEthereumAddress},
- helpers: AaveProtocolTestHelpers,
+ helpers: AaveProtocolDataProvider,
admin: tEthereumAddress
) => {
const addressProvider = await getLendingPoolAddressesProvider();
@@ -207,7 +216,7 @@ export const enableReservesToBorrowByHelper = async (
}
if (tokens.length) {
// Set aTokenAndRatesDeployer as temporal admin
- await waitForTx(await addressProvider.setAaveAdmin(atokenAndRatesDeployer.address));
+ await waitForTx(await addressProvider.setPoolAdmin(atokenAndRatesDeployer.address));
// Deploy init per chunks
const stableChunks = 20;
@@ -233,14 +242,14 @@ export const enableReservesToBorrowByHelper = async (
console.log(` - Init for: ${chunkedSymbols[chunkIndex].join(', ')}`);
}
// Set deployer back as admin
- await waitForTx(await addressProvider.setAaveAdmin(admin));
+ await waitForTx(await addressProvider.setPoolAdmin(admin));
}
};
export const enableReservesAsCollateralByHelper = async (
reservesParams: iMultiPoolsAssets,
tokenAddresses: {[symbol: string]: tEthereumAddress},
- helpers: AaveProtocolTestHelpers,
+ helpers: AaveProtocolDataProvider,
admin: tEthereumAddress
) => {
const addressProvider = await getLendingPoolAddressesProvider();
@@ -280,7 +289,7 @@ export const enableReservesAsCollateralByHelper = async (
}
if (tokens.length) {
// Set aTokenAndRatesDeployer as temporal admin
- await waitForTx(await addressProvider.setAaveAdmin(atokenAndRatesDeployer.address));
+ await waitForTx(await addressProvider.setPoolAdmin(atokenAndRatesDeployer.address));
// Deploy init per chunks
const enableChunks = 20;
@@ -304,6 +313,6 @@ export const enableReservesAsCollateralByHelper = async (
console.log(` - Init for: ${chunkedSymbols[chunkIndex].join(', ')}`);
}
// Set deployer back as admin
- await waitForTx(await addressProvider.setAaveAdmin(admin));
+ await waitForTx(await addressProvider.setPoolAdmin(admin));
}
};
diff --git a/helpers/misc-utils.ts b/helpers/misc-utils.ts
index 3df0e7d8..0356fef4 100644
--- a/helpers/misc-utils.ts
+++ b/helpers/misc-utils.ts
@@ -4,9 +4,8 @@ import low from 'lowdb';
import FileSync from 'lowdb/adapters/FileSync';
import {WAD} from './constants';
import {Wallet, ContractTransaction} from 'ethers';
+import {HardhatRuntimeEnvironment} from 'hardhat/types';
import {BuidlerRuntimeEnvironment} from '@nomiclabs/buidler/types';
-import path from 'path';
-import fs from 'fs';
export const toWad = (value: string | number) => new BigNumber(value).times(WAD).toFixed();
@@ -15,9 +14,11 @@ export const stringToBigNumber = (amount: string): BigNumber => new BigNumber(am
export const getDb = () => low(new FileSync('./deployed-contracts.json'));
-export let BRE: BuidlerRuntimeEnvironment = {} as BuidlerRuntimeEnvironment;
-export const setBRE = (_BRE: BuidlerRuntimeEnvironment) => {
- BRE = _BRE;
+export let DRE:
+ | HardhatRuntimeEnvironment
+ | BuidlerRuntimeEnvironment = {} as HardhatRuntimeEnvironment;
+export const setDRE = (_DRE: HardhatRuntimeEnvironment | BuidlerRuntimeEnvironment) => {
+ DRE = _DRE;
};
export const sleep = (milliseconds: number) => {
@@ -26,21 +27,21 @@ export const sleep = (milliseconds: number) => {
export const createRandomAddress = () => Wallet.createRandom().address;
-export const evmSnapshot = async () => await BRE.ethereum.send('evm_snapshot', []);
+export const evmSnapshot = async () => await DRE.ethers.provider.send('evm_snapshot', []);
-export const evmRevert = async (id: string) => BRE.ethereum.send('evm_revert', [id]);
+export const evmRevert = async (id: string) => DRE.ethers.provider.send('evm_revert', [id]);
export const timeLatest = async () => {
- const block = await BRE.ethers.provider.getBlock('latest');
+ const block = await DRE.ethers.provider.getBlock('latest');
return new BigNumber(block.timestamp);
};
export const advanceBlock = async (timestamp: number) =>
- await BRE.ethers.provider.send('evm_mine', [timestamp]);
+ await DRE.ethers.provider.send('evm_mine', [timestamp]);
export const increaseTime = async (secondsToIncrease: number) => {
- await BRE.ethers.provider.send('evm_increaseTime', [secondsToIncrease]);
- await BRE.ethers.provider.send('evm_mine', []);
+ await DRE.ethers.provider.send('evm_increaseTime', [secondsToIncrease]);
+ await DRE.ethers.provider.send('evm_mine', []);
};
export const waitForTx = async (tx: ContractTransaction) => await tx.wait(1);
@@ -62,3 +63,26 @@ export const chunk = (arr: Array, chunkSize: number): Array> => {
[]
);
};
+
+interface DbEntry {
+ [network: string]: {
+ deployer: string;
+ address: string;
+ };
+}
+
+export const printContracts = () => {
+ const network = DRE.network.name;
+ const db = getDb();
+ console.log('Contracts deployed at', network);
+ console.log('---------------------------------');
+
+ const entries = Object.entries(db.getState()).filter(([_k, value]) => !!value[network]);
+
+ const contractsPrint = entries.map(
+ ([key, value]: [string, DbEntry]) => `${key}: ${value[network].address}`
+ );
+
+ console.log('N# Contracts:', entries.length);
+ console.log(contractsPrint.join('\n'), '\n');
+};
diff --git a/helpers/types.ts b/helpers/types.ts
index 7c4da1f4..c9aac797 100644
--- a/helpers/types.ts
+++ b/helpers/types.ts
@@ -1,5 +1,4 @@
import BigNumber from 'bignumber.js';
-import {MockTokenMap} from './contracts-helpers';
export interface SymbolMap {
[symbol: string]: T;
@@ -11,6 +10,7 @@ export enum eEthereumNetwork {
ropsten = 'ropsten',
main = 'main',
coverage = 'coverage',
+ hardhat = 'hardhat',
}
export enum EthereumNetworkNames {
@@ -28,6 +28,7 @@ export enum eContractid {
Example = 'Example',
LendingPoolAddressesProvider = 'LendingPoolAddressesProvider',
MintableERC20 = 'MintableERC20',
+ MintableDelegationERC20 = 'MintableDelegationERC20',
LendingPoolAddressesProviderRegistry = 'LendingPoolAddressesProviderRegistry',
LendingPoolParametersProvider = 'LendingPoolParametersProvider',
LendingPoolConfigurator = 'LendingPoolConfigurator',
@@ -47,9 +48,10 @@ export enum eContractid {
WalletBalanceProvider = 'WalletBalanceProvider',
AToken = 'AToken',
MockAToken = 'MockAToken',
+ DelegationAwareAToken = 'DelegationAwareAToken',
MockStableDebtToken = 'MockStableDebtToken',
MockVariableDebtToken = 'MockVariableDebtToken',
- AaveProtocolTestHelpers = 'AaveProtocolTestHelpers',
+ AaveProtocolDataProvider = 'AaveProtocolDataProvider',
IERC20Detailed = 'IERC20Detailed',
StableDebtToken = 'StableDebtToken',
VariableDebtToken = 'VariableDebtToken',
@@ -57,6 +59,14 @@ export enum eContractid {
TokenDistributor = 'TokenDistributor',
StableAndVariableTokensHelper = 'StableAndVariableTokensHelper',
ATokensAndRatesHelper = 'ATokensAndRatesHelper',
+ UiPoolDataProvider = 'UiPoolDataProvider',
+ WETHGateway = 'WETHGateway',
+ WETH = 'WETH',
+ WETHMocked = 'WETHMocked',
+ SelfdestructTransferMock = 'SelfdestructTransferMock',
+ LendingPoolImpl = 'LendingPoolImpl',
+ LendingPoolConfiguratorImpl = 'LendingPoolConfiguratorImpl',
+ LendingPoolCollateralManagerImpl = 'LendingPoolCollateralManagerImpl',
}
/*
@@ -72,7 +82,11 @@ export enum eContractid {
* - P = Pausable
*/
export enum ProtocolErrors {
- VL_AMOUNT_NOT_GREATER_THAN_0 = '1', // 'Amount must be greater than 0'
+ //common errors
+ CALLER_NOT_POOL_ADMIN = '33', // 'The caller must be the pool admin'
+
+ //contract specific errors
+ VL_INVALID_AMOUNT = '1', // 'Amount must be greater than 0'
VL_NO_ACTIVE_RESERVE = '2', // 'Action requires an active reserve'
VL_RESERVE_FROZEN = '3', // 'Action requires an unfrozen reserve'
VL_CURRENT_AVAILABLE_LIQUIDITY_NOT_ENOUGH = '4', // 'The current liquidity is not enough'
@@ -98,13 +112,12 @@ export enum ProtocolErrors {
LP_NOT_ENOUGH_LIQUIDITY_TO_BORROW = '24', // 'There is not enough liquidity available to borrow'
LP_REQUESTED_AMOUNT_TOO_SMALL = '25', // 'The requested amount is too small for a FlashLoan.'
LP_INCONSISTENT_PROTOCOL_ACTUAL_BALANCE = '26', // 'The actual balance of the protocol is inconsistent'
- LP_CALLER_NOT_LENDING_POOL_CONFIGURATOR = '27', // 'The actual balance of the protocol is inconsistent'
+ LP_CALLER_NOT_LENDING_POOL_CONFIGURATOR = '27', // 'The caller is not the lending pool configurator'
LP_INCONSISTENT_FLASHLOAN_PARAMS = '28',
AT_CALLER_MUST_BE_LENDING_POOL = '29', // 'The caller of this function must be a lending pool'
AT_CANNOT_GIVE_ALLVWANCE_TO_HIMSELF = '30', // 'User cannot give allowance to himself'
AT_TRANSFER_AMOUNT_NOT_GT_0 = '31', // 'Transferred amount needs to be greater than zero'
RL_RESERVE_ALREADY_INITIALIZED = '32', // 'Reserve has already been initialized'
- LPC_CALLER_NOT_AAVE_ADMIN = '33', // 'The caller must be the aave admin'
LPC_RESERVE_LIQUIDITY_NOT_0 = '34', // 'The liquidity of the reserve needs to be 0'
LPC_INVALID_ATOKEN_POOL_ADDRESS = '35', // 'The liquidity of the reserve needs to be 0'
LPC_INVALID_STABLE_DEBT_TOKEN_POOL_ADDRESS = '36', // 'The liquidity of the reserve needs to be 0'
@@ -112,6 +125,7 @@ export enum ProtocolErrors {
LPC_INVALID_STABLE_DEBT_TOKEN_UNDERLYING_ADDRESS = '38', // 'The liquidity of the reserve needs to be 0'
LPC_INVALID_VARIABLE_DEBT_TOKEN_UNDERLYING_ADDRESS = '39', // 'The liquidity of the reserve needs to be 0'
LPC_INVALID_ADDRESSES_PROVIDER_ID = '40', // 'The liquidity of the reserve needs to be 0'
+ LPC_CALLER_NOT_EMERGENCY_ADMIN = '76', // 'The caller must be the emergencya admin'
LPAPR_PROVIDER_NOT_REGISTERED = '41', // 'Provider is not registered'
LPCM_HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '42', // 'Health factor is not below the threshold'
LPCM_COLLATERAL_CANNOT_BE_LIQUIDATED = '43', // 'The collateral chosen cannot be liquidated'
@@ -130,7 +144,7 @@ export enum ProtocolErrors {
AT_INVALID_MINT_AMOUNT = '56', //invalid amount to mint
LP_FAILED_REPAY_WITH_COLLATERAL = '57',
AT_INVALID_BURN_AMOUNT = '58', //invalid amount to burn
- LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH = '59', // User borrows on behalf, but allowance are too small
+ LP_BORROW_ALLOWANCE_NOT_ENOUGH = '59', // User borrows on behalf, but allowance are too small
LP_FAILED_COLLATERAL_SWAP = '60',
LP_INVALID_EQUAL_ASSETS_TO_SWAP = '61',
LP_REENTRANCY_NOT_ALLOWED = '62',
@@ -171,7 +185,7 @@ export interface iAssetBase {
USDC: T;
USDT: T;
SUSD: T;
- LEND: T;
+ AAVE: T;
BAT: T;
REP: T;
MKR: T;
@@ -182,8 +196,11 @@ export interface iAssetBase {
ZRX: T;
SNX: T;
BUSD: T;
-
+ YFI: T;
+ UNI: T;
USD: T;
+ REN: T;
+ ENJ: T;
UNI_DAI_ETH: T;
UNI_USDC_ETH: T;
@@ -204,7 +221,7 @@ export type iAavePoolAssets = Pick<
| 'USDC'
| 'USDT'
| 'SUSD'
- | 'LEND'
+ | 'AAVE'
| 'BAT'
| 'REP'
| 'MKR'
@@ -216,6 +233,10 @@ export type iAavePoolAssets = Pick<
| 'SNX'
| 'BUSD'
| 'WETH'
+ | 'YFI'
+ | 'UNI'
+ | 'REN'
+ | 'ENJ'
>;
export type iUniAssets = Pick<
@@ -245,7 +266,7 @@ export type iAssetAggregatorBase = iAssetsWithoutETH;
export enum TokenContractId {
DAI = 'DAI',
- LEND = 'LEND',
+ AAVE = 'AAVE',
TUSD = 'TUSD',
BAT = 'BAT',
WETH = 'WETH',
@@ -259,9 +280,13 @@ export enum TokenContractId {
KNC = 'KNC',
MANA = 'MANA',
REP = 'REP',
+ REN = 'REN',
SNX = 'SNX',
BUSD = 'BUSD',
USD = 'USD',
+ YFI = 'YFI',
+ UNI = 'UNI',
+ ENJ = 'ENJ',
UNI_DAI_ETH = 'UNI_DAI_ETH',
UNI_USDC_ETH = 'UNI_USDC_ETH',
UNI_SETH_ETH = 'UNI_SETH_ETH',
@@ -298,6 +323,7 @@ export interface iParamsPerNetwork {
[eEthereumNetwork.kovan]: T;
[eEthereumNetwork.ropsten]: T;
[eEthereumNetwork.main]: T;
+ [eEthereumNetwork.hardhat]: T;
}
export interface iParamsPerPool {
@@ -357,7 +383,6 @@ export interface ILendingRate {
export interface ICommonConfiguration {
ConfigName: string;
ProviderId: number;
- ReserveSymbols: string[];
ProtocolGlobalParams: IProtocolGlobalConfig;
Mocks: IMocksConfig;
ProviderRegistry: iParamsPerNetwork;
@@ -367,12 +392,15 @@ export interface ICommonConfiguration {
ChainlinkProxyPriceProvider: iParamsPerNetwork;
FallbackOracle: iParamsPerNetwork;
ChainlinkAggregator: iParamsPerNetwork;
- AaveAdmin: iParamsPerNetwork;
- AaveAdminIndex: number;
+ PoolAdmin: iParamsPerNetwork;
+ PoolAdminIndex: number;
+ EmergencyAdmin: iParamsPerNetwork;
+ EmergencyAdminIndex: number;
ReserveAssets: iParamsPerNetwork>;
ReservesConfig: iMultiPoolsAssets;
ATokenDomainSeparator: iParamsPerNetwork;
ProxyPriceProvider: iParamsPerNetwork;
+ WETH: iParamsPerNetwork;
}
export interface IAaveConfiguration extends ICommonConfiguration {
diff --git a/package-lock.json b/package-lock.json
index de4f3707..602312e5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1109,6 +1109,22 @@
}
}
},
+ "@nomiclabs/hardhat-ethers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.0.tgz",
+ "integrity": "sha512-fIi6XP9PgKqwSNVcLDr6S5hvGlc21PendaLD5eGdXEXc9aYQ0OJX8Mk3evs+p78x7W9n9U3ZcKtTiGc1+YScDw==",
+ "dev": true
+ },
+ "@nomiclabs/hardhat-waffle": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.0.tgz",
+ "integrity": "sha512-CnG9JC0rgqa68LTgyETxBUEWYAovvNGVs5abqaXjG80eF7iMLjDjM8IjOM87siAaxaxFCf6VBMJmtueqVq7jZw==",
+ "dev": true,
+ "requires": {
+ "@types/sinon-chai": "^3.2.3",
+ "@types/web3": "1.0.19"
+ }
+ },
"@openzeppelin/contracts": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.1.0.tgz",
@@ -2246,6 +2262,12 @@
"integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
"dev": true
},
+ "adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
+ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
+ "dev": true
+ },
"aes-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
@@ -2888,15 +2910,6 @@
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"dev": true
},
- "buidler-gas-reporter": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/buidler-gas-reporter/-/buidler-gas-reporter-0.1.4.tgz",
- "integrity": "sha512-objSu/tGggxKDmlpZViM9uEKRSo7vXxBsPv+vXegre1AWapJXQNfJPtBmrNvnT5Ixl8pecWSRXsfO95nJAn4yw==",
- "dev": true,
- "requires": {
- "eth-gas-reporter": "^0.2.18"
- }
- },
"buidler-typechain": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/buidler-typechain/-/buidler-typechain-0.1.1.tgz",
@@ -3763,6 +3776,12 @@
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
"dev": true
},
+ "dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
+ "dev": true
+ },
"download": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
@@ -4108,9 +4127,9 @@
}
},
"eth-gas-reporter": {
- "version": "0.2.18",
- "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.18.tgz",
- "integrity": "sha512-P6LQ1QmU9bqU4zmd01Ws/b2EWAD5rT771U0wyJ/c+fKE6RdE9ks8KzjdR1zjosV2uilMfqVTtrBrXveCOnaTyQ==",
+ "version": "0.2.19",
+ "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.19.tgz",
+ "integrity": "sha512-yQmbAa6O9/Yl/syNml2A0R+ZLQnJ9m9jogFXHzjMWVBMUVnAcEskOVyxaMYddkclZdYIMxE99tQy830C2jLsAQ==",
"dev": true,
"requires": {
"@ethersproject/abi": "^5.0.0-beta.146",
@@ -4131,9 +4150,9 @@
},
"dependencies": {
"@solidity-parser/parser": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.1.tgz",
- "integrity": "sha512-DF7H6T8I4lo2IZOE2NZwt3631T8j1gjpQLjmvY2xBNK50c4ltslR4XPKwT6RkeSd4+xCAK0GHC/k7sbRDBE4Yw==",
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.2.tgz",
+ "integrity": "sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ==",
"dev": true
},
"elliptic": {
@@ -5116,6 +5135,12 @@
"integrity": "sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s=",
"dev": true
},
+ "follow-redirects": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
+ "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
+ "dev": true
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -6051,403 +6076,19 @@
"websocket": "1.0.29"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/core": {
- "version": "7.11.1",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz",
- "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.11.0",
- "@babel/helper-module-transforms": "^7.11.0",
- "@babel/helpers": "^7.10.4",
- "@babel/parser": "^7.11.1",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.11.0",
- "@babel/types": "^7.11.0",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "json5": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
- "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- }
- }
- },
- "@babel/generator": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz",
- "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==",
- "requires": {
- "@babel/types": "^7.11.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- }
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz",
- "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==",
- "requires": {
- "@babel/types": "^7.11.0"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz",
- "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==",
- "requires": {
- "@babel/helper-module-imports": "^7.10.4",
- "@babel/helper-replace-supers": "^7.10.4",
- "@babel/helper-simple-access": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.11.0",
- "lodash": "^4.17.19"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- }
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
- "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
- "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.10.4",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/traverse": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
- "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
- "requires": {
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
- "requires": {
- "@babel/types": "^7.11.0"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
- },
- "@babel/helpers": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
- "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
- "requires": {
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.11.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz",
- "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz",
- "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.11.0",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.11.0",
- "@babel/types": "^7.11.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
- },
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- }
- }
- },
- "@babel/types": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz",
- "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
- }
- }
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
- }
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
- "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw=="
- },
- "@samverschueren/stream-to-observable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
- "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
- "requires": {
- "any-observable": "^0.3.0"
- }
- },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true,
+ "optional": true
},
"@szmarczak/http-timer": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
"integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
+ "optional": true,
"requires": {
"defer-to-connect": "^1.0.1"
}
@@ -6456,6 +6097,8 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz",
"integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==",
+ "dev": true,
+ "optional": true,
"requires": {
"bignumber.js": "*"
}
@@ -6464,29 +6107,16 @@
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
"integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "dev": true,
"requires": {
"@types/node": "*"
}
},
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
- },
- "@types/json-schema": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
- "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ=="
- },
"@types/node": {
"version": "14.0.27",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz",
- "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g=="
- },
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==",
+ "dev": true
},
"@types/pbkdf2": {
"version": "3.1.0",
@@ -6506,18 +6136,12 @@
"@types/node": "*"
}
},
- "@types/web3": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz",
- "integrity": "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==",
- "requires": {
- "web3": "*"
- }
- },
"@web3-js/scrypt-shim": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz",
"integrity": "sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==",
+ "dev": true,
+ "optional": true,
"requires": {
"scryptsy": "^2.1.0",
"semver": "^6.3.0"
@@ -6526,12 +6150,16 @@
"scryptsy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz",
- "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w=="
+ "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==",
+ "dev": true,
+ "optional": true
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -6539,6 +6167,8 @@
"version": "1.0.30",
"resolved": "https://registry.npmjs.org/@web3-js/websocket/-/websocket-1.0.30.tgz",
"integrity": "sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==",
+ "dev": true,
+ "optional": true,
"requires": {
"debug": "^2.2.0",
"es5-ext": "^0.10.50",
@@ -6551,6 +6181,8 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
"requires": {
"ms": "2.0.0"
}
@@ -6558,178 +6190,12 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
}
}
},
- "@webassemblyjs/ast": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
- "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
- "requires": {
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
- "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ=="
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
- "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA=="
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
- "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q=="
- },
- "@webassemblyjs/helper-code-frame": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
- "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
- "requires": {
- "@webassemblyjs/wast-printer": "1.8.5"
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
- "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow=="
- },
- "@webassemblyjs/helper-module-context": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
- "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "mamacro": "^0.0.3"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
- "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ=="
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
- "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
- "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
- "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
- "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw=="
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
- "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/helper-wasm-section": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-opt": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "@webassemblyjs/wast-printer": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
- "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
- "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
- "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
- }
- },
- "@webassemblyjs/wast-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
- "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/floating-point-hex-parser": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-code-frame": "1.8.5",
- "@webassemblyjs/helper-fsm": "1.8.5",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
- "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5",
- "@xtuc/long": "4.2.2"
- }
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
- },
"abstract-leveldown": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz",
@@ -6743,21 +6209,13 @@
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "optional": true,
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
- "acorn": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
- "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w=="
- },
- "acorn-jsx": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
- "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ=="
- },
"aes-js": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz",
@@ -6765,26 +6223,11 @@
"dev": true,
"optional": true
},
- "aggregate-error": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
- "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "dependencies": {
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
- }
- }
- },
"ajv": {
"version": "6.12.3",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
"integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
+ "dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6792,16 +6235,6 @@
"uri-js": "^4.2.2"
}
},
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
- },
"ansi-colors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
@@ -6811,21 +6244,6 @@
"ansi-wrap": "^0.1.0"
}
},
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
- }
- }
- },
"ansi-gray": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
@@ -6838,12 +6256,14 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
},
"ansi-wrap": {
"version": "0.1.0",
@@ -6851,20 +6271,18 @@
"integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
"dev": true
},
- "any-observable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
- "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog=="
- },
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true,
+ "optional": true
},
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@@ -6874,6 +6292,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -6889,36 +6308,17 @@
"buffer-equal": "^1.0.0"
}
},
- "append-transform": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
- "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
- "requires": {
- "default-require-extensions": "^3.0.0"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
- },
"archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
},
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
},
"arr-filter": {
"version": "1.1.2",
@@ -6932,7 +6332,8 @@
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
},
"arr-map": {
"version": "2.0.2",
@@ -6946,7 +6347,8 @@
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
},
"array-each": {
"version": "1.0.1",
@@ -6957,17 +6359,9 @@
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-includes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
- "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "is-string": "^1.0.5"
- }
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true,
+ "optional": true
},
"array-initial": {
"version": "1.1.0",
@@ -7032,21 +6426,14 @@
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- },
- "array.prototype.flat": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
- "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -7055,51 +6442,31 @@
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- }
- },
- "assert-match": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/assert-match/-/assert-match-1.1.1.tgz",
- "integrity": "sha512-c0QY2kpYVrH/jis6cCq9Mnt4/bIdGALDh1N8HY9ZARZedsMs5LSbgywxkjd5A1uNVLN0L8evANxBPxKiabVoZw==",
- "requires": {
- "assert": "^1.4.1",
- "babel-runtime": "^6.23.0",
- "es-to-primitive": "^1.1.1",
- "lodash.merge": "^4.6.0"
- }
- },
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
},
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
},
"async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "dev": true,
"requires": {
"lodash": "^4.17.11"
}
@@ -7119,7 +6486,8 @@
"async-each": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
},
"async-eventemitter": {
"version": "0.2.4",
@@ -7133,7 +6501,8 @@
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
},
"async-settle": {
"version": "1.0.0",
@@ -7147,22 +6516,26 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
},
"aws4": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
- "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
+ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
+ "dev": true
},
"babel-code-frame": {
"version": "6.26.0",
@@ -7794,6 +7167,7 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
@@ -7903,12 +7277,14 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
},
"base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@@ -7923,6 +7299,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -7931,6 +7308,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -7939,6 +7317,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -7947,6 +7326,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -7967,12 +7347,14 @@
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
"requires": {
"tweetnacl": "^0.14.3"
},
@@ -7980,29 +7362,29 @@
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
}
}
},
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
- },
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
- "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "dev": true,
+ "optional": true
},
"binary-extensions": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
@@ -8024,6 +7406,7 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
"integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
+ "dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
@@ -8032,6 +7415,8 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
"integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dev": true,
+ "optional": true,
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
@@ -8040,12 +7425,16 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8059,7 +7448,9 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -8067,6 +7458,8 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "~5.1.0"
},
@@ -8074,7 +7467,9 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
}
}
}
@@ -8089,17 +7484,22 @@
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true,
+ "optional": true
},
"bn.js": {
"version": "4.11.9",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "optional": true,
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
@@ -8117,6 +7517,8 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
"requires": {
"ms": "2.0.0"
}
@@ -8124,7 +7526,9 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -8132,6 +7536,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -8141,6 +7546,7 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -8158,6 +7564,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -8167,26 +7574,14 @@
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
- },
- "browserfs": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/browserfs/-/browserfs-1.4.3.tgz",
- "integrity": "sha512-tz8HClVrzTJshcyIu8frE15cjqjcBIu15Bezxsvl/i+6f59iNCN3kznlWjz0FEb3DlnDx3gW5szxeT6D1x0s0w==",
- "requires": {
- "async": "^2.1.4",
- "pako": "^1.0.4"
- }
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
"requires": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
@@ -8200,6 +7595,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
"integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "optional": true,
"requires": {
"browserify-aes": "^1.0.4",
"browserify-des": "^1.0.0",
@@ -8210,6 +7607,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
"integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "optional": true,
"requires": {
"cipher-base": "^1.0.1",
"des.js": "^1.0.0",
@@ -8221,6 +7620,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
@@ -8230,6 +7631,8 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
"integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^5.1.1",
"browserify-rsa": "^4.0.1",
@@ -8245,18 +7648,12 @@
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
- "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
+ "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==",
+ "dev": true,
+ "optional": true
}
}
},
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "requires": {
- "pako": "~1.0.5"
- }
- },
"browserslist": {
"version": "3.2.8",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
@@ -8291,6 +7688,7 @@
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+ "dev": true,
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
@@ -8300,6 +7698,8 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "optional": true,
"requires": {
"buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0"
@@ -8308,12 +7708,16 @@
"buffer-alloc-unsafe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true,
+ "optional": true
},
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true,
+ "optional": true
},
"buffer-equal": {
"version": "1.0.0",
@@ -8324,32 +7728,35 @@
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true,
+ "optional": true
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
},
"buffer-to-arraybuffer": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz",
- "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo="
+ "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=",
+ "dev": true,
+ "optional": true
},
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "optional": true
},
"bytewise": {
"version": "1.1.0",
@@ -8370,74 +7777,11 @@
"typewise-core": "^1.2"
}
},
- "cacache": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
- "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
- "requires": {
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "minipass": "^3.0.0",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "p-map": "^3.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.7.1",
- "ssri": "^7.0.0",
- "unique-filename": "^1.1.1"
- },
- "dependencies": {
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@@ -8454,6 +7798,8 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
"integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "dev": true,
+ "optional": true,
"requires": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
@@ -8465,9 +7811,11 @@
},
"dependencies": {
"get-stream": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "optional": true,
"requires": {
"pump": "^3.0.0"
}
@@ -8475,7 +7823,9 @@
"lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -8509,37 +7859,6 @@
}
}
},
- "caching-transform": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
- "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
- "requires": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- },
- "dependencies": {
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
- },
"camelcase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
@@ -8555,12 +7874,14 @@
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
"requires": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
@@ -8569,11 +7890,6 @@
"supports-color": "^2.0.0"
}
},
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
- },
"checkpoint-store": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz",
@@ -8587,6 +7903,7 @@
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
"requires": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@@ -8605,25 +7922,15 @@
"chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true,
+ "optional": true
},
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@@ -8633,6 +7940,7 @@
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
"requires": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@@ -8644,46 +7952,13 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
}
}
},
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-truncate": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
- "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
- "requires": {
- "slice-ansi": "0.0.4",
- "string-width": "^1.0.1"
- },
- "dependencies": {
- "slice-ansi": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
- "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU="
- }
- }
- },
- "cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
- },
"cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
@@ -8711,6 +7986,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "optional": true,
"requires": {
"mimic-response": "^1.0.0"
}
@@ -8773,7 +8050,8 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
},
"collection-map": {
"version": "1.0.0",
@@ -8790,24 +8068,12 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
"requires": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
}
},
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
"color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
@@ -8818,39 +8084,35 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
- "command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
- },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "optional": true
},
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -8861,12 +8123,14 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -8880,37 +8144,26 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
- },
- "contains-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
- "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo="
- },
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "5.1.2"
},
@@ -8918,19 +8171,24 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
}
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true,
+ "optional": true
},
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
"integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.1"
},
@@ -8938,52 +8196,37 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true,
+ "optional": true
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true,
+ "optional": true
},
"cookiejar": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==",
+ "dev": true,
+ "optional": true
},
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
},
"copy-props": {
"version": "2.0.4",
@@ -8998,7 +8241,8 @@
"core-js": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
},
"core-js-pure": {
"version": "3.6.5",
@@ -9009,63 +8253,26 @@
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
},
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dev": true,
+ "optional": true,
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "dependencies": {
- "parse-json": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz",
- "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==",
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
- }
- }
- },
- "coveralls": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz",
- "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==",
- "requires": {
- "js-yaml": "^3.13.1",
- "lcov-parse": "^1.0.0",
- "log-driver": "^1.2.7",
- "minimist": "^1.2.5",
- "request": "^2.88.2"
- }
- },
"create-ecdh": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
"integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.5.3"
@@ -9075,6 +8282,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
"requires": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@@ -9087,6 +8295,7 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
"requires": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@@ -9096,14 +8305,6 @@
"sha.js": "^2.4.8"
}
},
- "cross-env": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz",
- "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==",
- "requires": {
- "cross-spawn": "^7.0.0"
- }
- },
"cross-fetch": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz",
@@ -9114,30 +8315,12 @@
"whatwg-fetch": "2.0.4"
}
},
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "dependencies": {
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "optional": true,
"requires": {
"browserify-cipher": "^1.0.0",
"browserify-sign": "^4.0.0",
@@ -9152,15 +8335,11 @@
"randomfill": "^1.0.3"
}
},
- "cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
- },
"d": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
"requires": {
"es5-ext": "^0.10.50",
"type": "^1.0.1"
@@ -9170,19 +8349,16 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
- "date-fns": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
- "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
- },
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
"requires": {
"ms": "^2.1.1"
}
@@ -9190,17 +8366,21 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
},
"decompress": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
"integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"decompress-tar": "^4.0.0",
"decompress-tarbz2": "^4.0.0",
@@ -9215,7 +8395,9 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -9223,6 +8405,8 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "optional": true,
"requires": {
"mimic-response": "^1.0.0"
}
@@ -9231,6 +8415,8 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
"integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"file-type": "^5.2.0",
"is-stream": "^1.1.0",
@@ -9241,6 +8427,8 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
"integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "optional": true,
"requires": {
"decompress-tar": "^4.1.0",
"file-type": "^6.1.0",
@@ -9252,7 +8440,9 @@
"file-type": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -9260,6 +8450,8 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
"integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "optional": true,
"requires": {
"decompress-tar": "^4.1.1",
"file-type": "^5.2.0",
@@ -9270,6 +8462,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
"integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dev": true,
+ "optional": true,
"requires": {
"file-type": "^3.8.0",
"get-stream": "^2.2.0",
@@ -9280,12 +8474,16 @@
"file-type": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true,
+ "optional": true
},
"get-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
"integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "optional": true,
"requires": {
"object-assign": "^4.0.1",
"pinkie-promise": "^2.0.0"
@@ -9294,15 +8492,12 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "optional": true
}
}
},
- "dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
- },
"deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -9325,11 +8520,6 @@
}
}
},
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
- },
"default-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
@@ -9347,21 +8537,6 @@
}
}
},
- "default-require-extensions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
- "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
- "requires": {
- "strip-bom": "^4.0.0"
- },
- "dependencies": {
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
- }
- }
- },
"default-resolution": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
@@ -9371,7 +8546,9 @@
"defer-to-connect": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
+ "dev": true,
+ "optional": true
},
"deferred-leveldown": {
"version": "1.2.2",
@@ -9397,6 +8574,7 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
"requires": {
"object-keys": "^1.0.12"
},
@@ -9404,7 +8582,8 @@
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
}
}
},
@@ -9412,6 +8591,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
"requires": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -9421,6 +8601,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -9429,6 +8610,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -9437,6 +8619,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -9454,17 +8637,22 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "optional": true
},
"des.js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
"integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "dev": true,
+ "optional": true,
"requires": {
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
@@ -9473,12 +8661,15 @@
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true,
+ "optional": true
},
"detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
},
"detect-indent": {
"version": "4.0.0",
@@ -9489,38 +8680,23 @@
"repeating": "^2.0.0"
}
},
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
- },
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
}
},
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "requires": {
- "esutils": "^2.0.2"
- }
- },
"dom-walk": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true
},
"dotignore": {
"version": "0.1.2",
@@ -9535,6 +8711,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",
"integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=",
+ "dev": true,
"requires": {
"browserify-aes": "^1.0.6",
"create-hash": "^1.1.2",
@@ -9544,12 +8721,15 @@
"duplexer3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true,
+ "optional": true
},
"duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
"requires": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -9560,12 +8740,14 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -9579,12 +8761,14 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -9605,6 +8789,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -9613,7 +8798,9 @@
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true,
+ "optional": true
},
"electron-to-chromium": {
"version": "1.3.521",
@@ -9621,15 +8808,11 @@
"integrity": "sha512-7/Cf5jUuAfLRY8SjfRES/6+9BDvmHAB2YQotCAaXK0IEacpjoSlyosPoC4s7lfb7vIOBubXvsssu8+8qaRGjcg==",
"dev": true
},
- "elegant-spinner": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
- "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4="
- },
"elliptic": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
"integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+ "dev": true,
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
@@ -9640,20 +8823,12 @@
"minimalistic-crypto-utils": "^1.0.0"
}
},
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
- },
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "optional": true
},
"encoding": {
"version": "0.1.13",
@@ -9703,67 +8878,16 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
"requires": {
"once": "^1.4.0"
}
},
- "enhanced-resolve": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
- "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
"requires": {
"prr": "~1.0.1"
}
@@ -9772,6 +8896,7 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
@@ -9780,6 +8905,7 @@
"version": "1.17.6",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
"integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
+ "dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
@@ -9797,7 +8923,8 @@
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
}
}
},
@@ -9805,6 +8932,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -9815,21 +8943,18 @@
"version": "0.10.53",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
"integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "dev": true,
"requires": {
"es6-iterator": "~2.0.3",
"es6-symbol": "~3.1.3",
"next-tick": "~1.0.0"
}
},
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
- },
"es6-iterator": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
"requires": {
"d": "1",
"es5-ext": "^0.10.35",
@@ -9840,6 +8965,7 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dev": true,
"requires": {
"d": "^1.0.1",
"ext": "^1.1.2"
@@ -9860,470 +8986,28 @@
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true,
+ "optional": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "eslint-config-standard": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz",
- "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA=="
- },
- "eslint-import-resolver-node": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
- "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
- "requires": {
- "debug": "^2.6.9",
- "resolve": "^1.13.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "eslint-module-utils": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
- "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
- "requires": {
- "debug": "^2.6.9",
- "pkg-dir": "^2.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "eslint-plugin-es": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
- "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
- "requires": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
- },
- "dependencies": {
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="
- }
- }
- },
- "eslint-plugin-import": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz",
- "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==",
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "contains-path": "^0.1.0",
- "debug": "^2.6.9",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.2",
- "eslint-module-utils": "^2.4.1",
- "has": "^1.0.3",
- "minimatch": "^3.0.4",
- "object.values": "^1.1.0",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.12.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
- }
- }
- },
- "eslint-plugin-node": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz",
- "integrity": "sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg==",
- "requires": {
- "eslint-plugin-es": "^3.0.0",
- "eslint-utils": "^2.0.0",
- "ignore": "^5.1.1",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.1.0"
- },
- "dependencies": {
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "eslint-plugin-promise": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz",
- "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw=="
- },
- "eslint-plugin-standard": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz",
- "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ=="
- },
- "eslint-scope": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
- "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
- },
- "espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "requires": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "esquery": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
- "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
- }
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true,
+ "optional": true
},
"eth-block-tracker": {
"version": "3.0.1",
@@ -10377,6 +9061,8 @@
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
"integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=",
+ "dev": true,
+ "optional": true,
"requires": {
"idna-uts46-hx": "^2.3.1",
"js-sha3": "^0.5.7"
@@ -10385,7 +9071,9 @@
"js-sha3": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -10567,6 +9255,8 @@
"version": "0.1.29",
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz",
"integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.11.6",
"elliptic": "^6.4.0",
@@ -10848,6 +9538,8 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.7.tgz",
"integrity": "sha512-cDcJJSJ9GMAcURiAWO3DxIEhTL/uWqlQnvgKpuYQzYPrt/izuGU+1ntQmHt0IRq6ADoSYHFnB+aCEFIldjhkMQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"js-sha3": "^0.8.0"
}
@@ -10953,12 +9645,14 @@
"ethereumjs-common": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz",
- "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ=="
+ "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==",
+ "dev": true
},
"ethereumjs-tx": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz",
"integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==",
+ "dev": true,
"requires": {
"ethereumjs-common": "^1.5.0",
"ethereumjs-util": "^6.0.0"
@@ -10968,6 +9662,7 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz",
"integrity": "sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ==",
+ "dev": true,
"requires": {
"@types/bn.js": "^4.11.3",
"bn.js": "^4.11.0",
@@ -10982,6 +9677,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz",
"integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==",
+ "dev": true,
"requires": {
"bindings": "^1.5.0",
"inherits": "^2.0.4",
@@ -10993,6 +9689,7 @@
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz",
"integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==",
+ "dev": true,
"requires": {
"bindings": "^1.5.0",
"bip66": "^1.1.5",
@@ -11047,76 +9744,12 @@
"uuid": "^3.3.2"
}
},
- "ethers": {
- "version": "4.0.43",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.43.tgz",
- "integrity": "sha512-VjQRVgPrlU12jSMvypdE1yEqYQccdVbH8bbiz67dLF7raHlRV4+zW70GlxHcZYqgsnz0XYWrn6C06gqTQRb5tw==",
- "requires": {
- "aes-js": "3.0.0",
- "bn.js": "^4.4.0",
- "elliptic": "6.5.2",
- "hash.js": "1.1.3",
- "js-sha3": "0.5.7",
- "scrypt-js": "2.0.4",
- "setimmediate": "1.0.4",
- "uuid": "2.0.1",
- "xmlhttprequest": "1.8.0"
- },
- "dependencies": {
- "aes-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
- },
- "elliptic": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
- "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- },
- "hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
- },
- "scrypt-js": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
- "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw=="
- },
- "setimmediate": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz",
- "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48="
- },
- "uuid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
- "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w="
- }
- }
- },
"ethjs-unit": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
"integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "4.11.6",
"number-to-bn": "1.7.0"
@@ -11125,7 +9758,9 @@
"bn.js": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
+ "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -11133,6 +9768,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
"integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
+ "dev": true,
"requires": {
"is-hex-prefixed": "1.0.0",
"strip-hex-prefix": "1.0.0"
@@ -11141,63 +9777,31 @@
"eventemitter3": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
- "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="
+ "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
+ "dev": true,
+ "optional": true
},
"events": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
- "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+ "dev": true
},
"evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
"requires": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
}
},
- "execa": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
- "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "p-finally": "^2.0.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
- },
- "p-finally": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
- "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw=="
- }
- }
- },
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -11212,6 +9816,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -11220,6 +9825,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -11228,6 +9834,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -11235,7 +9842,8 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
@@ -11243,6 +9851,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
"integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
"requires": {
"homedir-polyfill": "^1.0.1"
}
@@ -11251,6 +9860,8 @@
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "optional": true,
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
@@ -11288,6 +9899,8 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
"requires": {
"ms": "2.0.0"
}
@@ -11295,12 +9908,16 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -11308,6 +9925,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
"integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
+ "dev": true,
"requires": {
"type": "^2.0.0"
},
@@ -11315,19 +9933,22 @@
"type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
- "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow=="
+ "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==",
+ "dev": true
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
},
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
"requires": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -11337,36 +9958,18 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
}
}
},
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- }
- }
- },
"extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -11382,6 +9985,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -11390,6 +9994,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -11398,6 +10003,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -11406,6 +10012,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -11414,6 +10021,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -11425,7 +10033,8 @@
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
},
"fake-merkle-patricia-tree": {
"version": "1.0.1",
@@ -11451,22 +10060,21 @@
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
},
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "optional": true,
"requires": {
"pend": "~1.2.0"
}
@@ -11492,46 +10100,24 @@
}
}
},
- "figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
"file-type": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true,
+ "optional": true
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
- },
- "filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true
},
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -11543,6 +10129,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -11553,6 +10140,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "optional": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
@@ -11567,6 +10156,8 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
"requires": {
"ms": "2.0.0"
}
@@ -11574,83 +10165,9 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -11668,6 +10185,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
"requires": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
@@ -11694,46 +10212,6 @@
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
"dev": true
},
- "flat": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
- "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
- "requires": {
- "is-buffer": "~2.0.3"
- },
- "dependencies": {
- "is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
- }
- }
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
- },
"flow-stoplight": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/flow-stoplight/-/flow-stoplight-1.0.0.tgz",
@@ -11744,6 +10222,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
"integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
"requires": {
"inherits": "^2.0.3",
"readable-stream": "^2.3.6"
@@ -11752,12 +10231,14 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -11771,12 +10252,14 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -11795,7 +10278,8 @@
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
},
"for-own": {
"version": "1.0.0",
@@ -11806,24 +10290,17 @@
"for-in": "^1.0.1"
}
},
- "foreground-child": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
- "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^3.0.2"
- }
- },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -11833,12 +10310,15 @@
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true,
+ "optional": true
},
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
"requires": {
"map-cache": "^0.2.2"
}
@@ -11846,65 +10326,23 @@
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fromentries": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz",
- "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw=="
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true,
+ "optional": true
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true,
+ "optional": true
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
@@ -11915,6 +10353,8 @@
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
"integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+ "dev": true,
+ "optional": true,
"requires": {
"minipass": "^2.6.0"
}
@@ -11929,60 +10369,17 @@
"through2": "^2.0.3"
}
},
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
},
"fsevents": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
@@ -11992,22 +10389,14 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
- },
- "generic-pool": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.0.4.tgz",
- "integrity": "sha1-+XGN7agvoSXtXEPjQcmiFadm2aM="
- },
- "gensync": {
- "version": "1.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
- "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
},
"get-caller-file": {
"version": "1.0.3",
@@ -12015,20 +10404,12 @@
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
- "get-own-enumerable-property-symbols": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
- },
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
- },
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "optional": true,
"requires": {
"pump": "^3.0.0"
}
@@ -12036,12 +10417,14 @@
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
@@ -12050,6 +10433,7 @@
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -12063,6 +10447,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -12072,6 +10457,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
"requires": {
"is-extglob": "^2.1.0"
}
@@ -12153,6 +10539,7 @@
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
"integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "dev": true,
"requires": {
"min-document": "^2.19.0",
"process": "~0.5.1"
@@ -12162,6 +10549,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
"requires": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
@@ -12172,6 +10560,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
"integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
"requires": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
@@ -12199,6 +10588,8 @@
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
"integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "optional": true,
"requires": {
"@sindresorhus/is": "^0.14.0",
"@szmarczak/http-timer": "^1.1.2",
@@ -12216,12 +10607,8 @@
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
},
"gulp": {
"version": "4.0.2",
@@ -12275,12 +10662,14 @@
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "dev": true,
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
@@ -12290,6 +10679,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
"requires": {
"function-bind": "^1.1.1"
}
@@ -12298,29 +10688,30 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
"has-symbol-support-x": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "dev": true,
+ "optional": true
},
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
},
"has-to-string-tag-x": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
"integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dev": true,
+ "optional": true,
"requires": {
"has-symbol-support-x": "^1.4.1"
}
@@ -12329,6 +10720,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@@ -12339,6 +10731,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@@ -12348,6 +10741,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -12358,6 +10752,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
"integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
"requires": {
"inherits": "^2.0.4",
"readable-stream": "^3.6.0",
@@ -12368,27 +10763,12 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
- "hasha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
- "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
- "requires": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- },
- "dependencies": {
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
- }
- }
- },
"hdkey": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.2.tgz",
@@ -12420,11 +10800,6 @@
}
}
},
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
"heap": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
@@ -12435,6 +10810,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@@ -12455,6 +10831,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
"requires": {
"parse-passwd": "^1.0.0"
}
@@ -12462,22 +10839,22 @@
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
- },
- "html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "dev": true
},
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true,
+ "optional": true
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "optional": true,
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
@@ -12489,161 +10866,36 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
}
}
},
"http-https": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
- "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs="
+ "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=",
+ "dev": true,
+ "optional": true
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
- },
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
- },
- "humanize": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/humanize/-/humanize-0.0.9.tgz",
- "integrity": "sha1-GZT/rs3+nEQe0r2sdFK3u0yeQaQ="
- },
- "husky": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/husky/-/husky-4.0.10.tgz",
- "integrity": "sha512-Ptm4k2DqOwxeK/kzu5RaJmNRoGvESrgDXObFcZ8aJZcyXyMBHhM2FqZj6zYKdetadmP3wCwxEHCBuB9xGlRp8A==",
- "requires": {
- "chalk": "^3.0.0",
- "ci-info": "^2.0.0",
- "cosmiconfig": "^6.0.0",
- "opencollective-postinstall": "^2.0.2",
- "pkg-dir": "^4.2.0",
- "please-upgrade-node": "^3.2.0",
- "slash": "^3.0.0",
- "which-pm-runs": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -12652,6 +10904,8 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz",
"integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==",
+ "dev": true,
+ "optional": true,
"requires": {
"punycode": "2.1.0"
},
@@ -12659,24 +10913,17 @@
"punycode": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0="
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true,
+ "optional": true
}
}
},
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
},
"immediate": {
"version": "3.3.0",
@@ -12684,96 +10931,11 @@
"integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==",
"dev": true
},
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-local": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
- "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
- "requires": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "requires": {
- "find-up": "^3.0.0"
- }
- }
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok="
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -12782,111 +10944,14 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
- },
- "inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
},
"interpret": {
"version": "1.4.0",
@@ -12912,7 +10977,9 @@
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "optional": true
},
"is-absolute": {
"version": "1.0.0",
@@ -12928,6 +10995,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -12936,6 +11004,7 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -12951,12 +11020,14 @@
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
},
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
"requires": {
"binary-extensions": "^1.0.0"
}
@@ -12964,17 +11035,20 @@
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
},
"is-callable": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
- "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
+ "dev": true
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -12983,6 +11057,7 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -12992,12 +11067,14 @@
"is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
@@ -13007,19 +11084,22 @@
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
}
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
},
"is-finite": {
"version": "1.1.0",
@@ -13037,6 +11117,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -13044,12 +11125,14 @@
"is-function": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+ "dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -13057,12 +11140,15 @@
"is-hex-prefixed": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ="
+ "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=",
+ "dev": true
},
"is-natural-number": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
- "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+ "dev": true,
+ "optional": true
},
"is-negated-glob": {
"version": "1.0.0",
@@ -13074,6 +11160,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -13082,61 +11169,45 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- },
"is-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
- "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
- },
- "is-observable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
- "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
- "requires": {
- "symbol-observable": "^1.1.0"
- }
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true,
+ "optional": true
},
"is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true,
+ "optional": true
},
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
- "is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
- },
"is-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
"integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
},
- "is-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
- },
"is-relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -13149,22 +11220,21 @@
"is-retry-allowed": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "dev": true,
+ "optional": true
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
},
"is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
@@ -13172,7 +11242,8 @@
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
},
"is-unc-path": {
"version": "1.0.0",
@@ -13198,12 +11269,8 @@
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
},
"isarray": {
"version": "0.0.1",
@@ -13214,201 +11281,38 @@
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg=="
- },
- "istanbul-lib-hook": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
- "requires": {
- "append-transform": "^2.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "istanbul-lib-processinfo": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
- "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^3.3.3"
- },
- "dependencies": {
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
},
"isurl": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
"integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "optional": true,
"requires": {
"has-to-string-tag-x": "^1.2.0",
"is-object": "^1.0.1"
}
},
- "jest-worker": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
- "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
- "requires": {
- "merge-stream": "^2.0.0",
- "supports-color": "^6.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "js-scrypt": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/js-scrypt/-/js-scrypt-0.2.0.tgz",
- "integrity": "sha1-emK3AbRhbnCtDN5URiequ5nX/jk=",
- "requires": {
- "generic-pool": "~2.0.4"
- }
- },
"js-sha3": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
+ "dev": true,
+ "optional": true
},
"js-tokens": {
"version": "3.0.2",
@@ -13416,19 +11320,11 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
- "js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
},
"jsesc": {
"version": "0.5.0",
@@ -13439,12 +11335,9 @@
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true,
+ "optional": true
},
"json-rpc-engine": {
"version": "3.8.0",
@@ -13478,12 +11371,14 @@
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"json-stable-stringify": {
"version": "1.0.1",
@@ -13497,12 +11392,14 @@
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
},
"json5": {
"version": "0.5.1",
@@ -13514,6 +11411,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "optional": true,
"requires": {
"graceful-fs": "^4.1.6"
}
@@ -13528,6 +11427,7 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
@@ -13555,6 +11455,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
"integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "optional": true,
"requires": {
"json-buffer": "3.0.0"
}
@@ -13562,15 +11464,8 @@
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "requires": {
- "graceful-fs": "^4.1.9"
- }
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
},
"last-run": {
"version": "1.1.1",
@@ -13638,11 +11533,6 @@
"invert-kv": "^1.0.0"
}
},
- "lcov-parse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
- "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A="
- },
"lead": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
@@ -13661,11 +11551,6 @@
"buffer": "^5.6.0"
}
},
- "level-concat-iterator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
- "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw=="
- },
"level-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
@@ -13855,14 +11740,6 @@
}
}
},
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "requires": {
- "xtend": "^4.0.2"
- }
- },
"level-ws": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz",
@@ -13982,15 +11859,6 @@
}
}
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
"liftoff": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
@@ -14007,259 +11875,6 @@
"resolve": "^1.1.7"
}
},
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
- },
- "lint-staged": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.0.tgz",
- "integrity": "sha512-/MrZOLMnljjMHakxlRd1Z5Kr8wWWlrWFasye7HaTv5tx56icwzT/STRty8flMKsyzBGTfTa9QszNVPsDS/yOug==",
- "requires": {
- "chalk": "^3.0.0",
- "commander": "^4.0.1",
- "cosmiconfig": "^6.0.0",
- "debug": "^4.1.1",
- "dedent": "^0.7.0",
- "execa": "^3.4.0",
- "listr": "^0.14.3",
- "log-symbols": "^3.0.0",
- "micromatch": "^4.0.2",
- "normalize-path": "^3.0.0",
- "please-upgrade-node": "^3.2.0",
- "stringify-object": "^3.3.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "listr": {
- "version": "0.14.3",
- "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
- "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
- "requires": {
- "@samverschueren/stream-to-observable": "^0.3.0",
- "is-observable": "^1.1.0",
- "is-promise": "^2.1.0",
- "is-stream": "^1.1.0",
- "listr-silent-renderer": "^1.1.1",
- "listr-update-renderer": "^0.5.0",
- "listr-verbose-renderer": "^0.5.0",
- "p-map": "^2.0.0",
- "rxjs": "^6.3.3"
- }
- },
- "listr-silent-renderer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
- "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4="
- },
- "listr-update-renderer": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
- "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
- "requires": {
- "chalk": "^1.1.3",
- "cli-truncate": "^0.2.1",
- "elegant-spinner": "^1.0.1",
- "figures": "^1.7.0",
- "indent-string": "^3.0.0",
- "log-symbols": "^1.0.2",
- "log-update": "^2.3.0",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
- }
- },
- "log-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
- "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
- "requires": {
- "chalk": "^1.0.0"
- }
- }
- }
- },
- "listr-verbose-renderer": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
- "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
- "requires": {
- "chalk": "^2.4.1",
- "cli-cursor": "^2.1.0",
- "date-fns": "^1.27.2",
- "figures": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -14281,185 +11896,11 @@
}
}
},
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
- },
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- }
- }
- },
"lodash": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
- "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw=="
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "log-driver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
- "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
- },
- "log-symbols": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
- "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
- "requires": {
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "log-update": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
- "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
- "requires": {
- "ansi-escapes": "^3.0.0",
- "cli-cursor": "^2.0.0",
- "wrap-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "wrap-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
- "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0"
- }
- }
- }
+ "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==",
+ "dev": true
},
"looper": {
"version": "2.0.0",
@@ -14479,12 +11920,15 @@
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true,
+ "optional": true
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
"requires": {
"yallist": "^3.0.2"
}
@@ -14492,12 +11936,15 @@
"ltgt": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="
+ "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
+ "dev": true
},
"make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"pify": "^3.0.0"
},
@@ -14505,7 +11952,9 @@
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -14518,28 +11967,17 @@
"kind-of": "^6.0.2"
}
},
- "mamacro": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
- "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
- },
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
},
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
"requires": {
"object-visit": "^1.0.0"
}
@@ -14583,6 +12021,7 @@
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@@ -14592,107 +12031,16 @@
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "mem": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
- "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^2.0.0",
- "p-is-promise": "^2.0.0"
- }
- },
- "memdown": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz",
- "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==",
- "requires": {
- "abstract-leveldown": "~6.2.1",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="
- }
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI="
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true,
+ "optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true,
+ "optional": true
},
"merkle-patricia-tree": {
"version": "2.3.2",
@@ -14849,12 +12197,15 @@
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true,
+ "optional": true
},
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -14875,6 +12226,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
"requires": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
@@ -14883,35 +12235,37 @@
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "optional": true
},
"mime-db": {
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
},
"mime-types": {
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
"requires": {
"mime-db": "1.44.0"
}
},
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
- },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true,
+ "optional": true
},
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
"integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "dev": true,
"requires": {
"dom-walk": "^0.1.0"
}
@@ -14919,17 +12273,20 @@
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
},
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -14937,115 +12294,35 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
},
"minipass": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
"integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+ "dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
"minizlib": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
"integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+ "dev": true,
+ "optional": true,
"requires": {
"minipass": "^2.9.0"
}
},
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
"requires": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
@@ -15055,6 +12332,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
@@ -15064,408 +12342,32 @@
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "optional": true
},
"mkdirp-promise": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz",
"integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=",
+ "dev": true,
+ "optional": true,
"requires": {
"mkdirp": "*"
}
},
- "mocha": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz",
- "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==",
- "requires": {
- "ansi-colors": "3.2.3",
- "browser-stdout": "1.3.1",
- "chokidar": "3.3.0",
- "debug": "3.2.6",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "find-up": "3.0.0",
- "glob": "7.1.3",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "3.13.1",
- "log-symbols": "2.2.0",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "ms": "2.1.1",
- "node-environment-flags": "1.0.6",
- "object.assign": "4.1.0",
- "strip-json-comments": "2.0.1",
- "supports-color": "6.0.0",
- "which": "1.3.1",
- "wide-align": "1.1.3",
- "yargs": "13.3.0",
- "yargs-parser": "13.1.1",
- "yargs-unparser": "1.6.0"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
- },
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
- "requires": {
- "picomatch": "^2.0.4"
- }
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "supports-color": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
- },
- "yargs": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
- "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.1"
- }
- },
- "yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "mocha-lcov-reporter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz",
- "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q="
- },
"mock-fs": {
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.12.0.tgz",
- "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ=="
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
+ "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==",
+ "dev": true,
+ "optional": true
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
"mute-stdout": {
"version": "1.0.1",
@@ -15473,25 +12375,24 @@
"integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
"dev": true
},
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
- },
"nan": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
- "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+ "dev": true
},
"nano-json-stream-parser": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz",
- "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18="
+ "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=",
+ "dev": true,
+ "optional": true
},
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -15506,30 +12407,18 @@
"to-regex": "^3.0.1"
}
},
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
- },
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true,
+ "optional": true
},
"next-tick": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
},
"node-addon-api": {
"version": "2.0.2",
@@ -15537,22 +12426,6 @@
"integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
"dev": true
},
- "node-environment-flags": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
- "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3",
- "semver": "^5.7.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
"node-fetch": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
@@ -15565,119 +12438,11 @@
"integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
"dev": true
},
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- }
- }
- }
- }
- },
- "node-preload": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
- "requires": {
- "process-on-spawn": "^1.0.0"
- }
- },
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -15688,19 +12453,23 @@
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
}
}
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
},
"normalize-url": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true,
+ "optional": true
},
"now-and-later": {
"version": "2.0.1",
@@ -15711,23 +12480,18 @@
"once": "^1.3.2"
}
},
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "requires": {
- "path-key": "^3.0.0"
- }
- },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
},
"number-to-bn": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
"integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "4.11.6",
"strip-hex-prefix": "1.0.0"
@@ -15736,259 +12500,29 @@
"bn.js": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
- }
- }
- },
- "nyc": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
- "requires": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
+ "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
+ "dev": true,
+ "optional": true
}
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
},
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
"requires": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
@@ -15999,6 +12533,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -16007,6 +12542,7 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -16016,7 +12552,8 @@
"object-inspect": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
- "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "dev": true
},
"object-is": {
"version": "1.1.2",
@@ -16038,6 +12575,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
"requires": {
"isobject": "^3.0.0"
}
@@ -16046,6 +12584,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
"requires": {
"define-properties": "^1.1.2",
"function-bind": "^1.1.1",
@@ -16056,7 +12595,8 @@
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
}
}
},
@@ -16076,6 +12616,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
"integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
+ "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1"
@@ -16095,6 +12636,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
"requires": {
"isobject": "^3.0.1"
}
@@ -16109,21 +12651,12 @@
"make-iterator": "^1.0.0"
}
},
- "object.values": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
- "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
"oboe": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz",
"integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=",
+ "dev": true,
+ "optional": true,
"requires": {
"http-https": "^1.0.0"
}
@@ -16132,6 +12665,8 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "optional": true,
"requires": {
"ee-first": "1.1.1"
}
@@ -16140,36 +12675,11 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"requires": {
"wrappy": "1"
}
},
- "onetime": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.1.tgz",
- "integrity": "sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==",
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "opencollective-postinstall": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
- "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
"ordered-read-streams": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
@@ -16217,11 +12727,6 @@
}
}
},
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
- },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -16240,134 +12745,39 @@
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
},
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
- },
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+ "dev": true,
+ "optional": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "p-is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
- "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "optional": true
},
"p-timeout": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
"integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
+ "dev": true,
+ "optional": true,
"requires": {
"p-finally": "^1.0.0"
}
},
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "package-hash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
- "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "requires": {
- "callsites": "^3.0.0"
- }
- },
"parse-asn1": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
"integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"asn1.js": "^4.0.0",
"browserify-aes": "^1.0.0",
@@ -16391,12 +12801,14 @@
"parse-headers": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
- "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA=="
+ "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==",
+ "dev": true
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
"requires": {
"error-ex": "^1.2.0"
}
@@ -16410,27 +12822,27 @@
"parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "optional": true
},
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
},
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
},
"path-exists": {
"version": "2.1.0",
@@ -16444,17 +12856,14 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
},
"path-root": {
"version": "0.1.1",
@@ -16474,7 +12883,9 @@
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true,
+ "optional": true
},
"path-type": {
"version": "1.1.0",
@@ -16499,6 +12910,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
"integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "dev": true,
"requires": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@@ -16510,86 +12922,36 @@
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true,
+ "optional": true
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
"requires": {
"pinkie": "^2.0.0"
}
},
- "pkg-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
- "requires": {
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- }
- }
- },
- "please-upgrade-node": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
- "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
- "requires": {
- "semver-compare": "^1.0.0"
- }
- },
- "portfinder": {
- "version": "1.0.28",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
- "requires": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.5"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
},
"precond": {
"version": "0.2.3",
@@ -16597,20 +12959,12 @@
"integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=",
"dev": true
},
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
- },
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
- },
- "prettier": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
- "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew=="
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true,
+ "optional": true
},
"pretty-hrtime": {
"version": "1.0.3",
@@ -16627,30 +12981,14 @@
"process": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
- "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
+ "dev": true
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "process-on-spawn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
- "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
- "requires": {
- "fromentries": "^1.2.0"
- }
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
},
"promise-to-callback": {
"version": "1.0.0",
@@ -16666,6 +13004,8 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
"integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "optional": true,
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.9.1"
@@ -16674,7 +13014,8 @@
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
},
"pseudomap": {
"version": "1.0.2",
@@ -16685,12 +13026,15 @@
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
},
"public-encrypt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
"integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
@@ -16762,6 +13106,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "optional": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -16771,6 +13117,7 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
"requires": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -16781,6 +13128,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -16791,37 +13139,33 @@
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "optional": true
},
"query-string": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
"integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dev": true,
+ "optional": true,
"requires": {
"decode-uri-component": "^0.2.0",
"object-assign": "^4.1.0",
"strict-uri-encode": "^1.0.0"
}
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
- },
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
@@ -16830,6 +13174,8 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "optional": true,
"requires": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
@@ -16838,12 +13184,16 @@
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "optional": true
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "optional": true,
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
@@ -16876,6 +13226,7 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -16886,6 +13237,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@@ -16895,12 +13247,14 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -16914,12 +13268,14 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -16944,7 +13300,8 @@
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
},
"regenerator-transform": {
"version": "0.10.1",
@@ -16961,6 +13318,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
"requires": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
@@ -16976,11 +13334,6 @@
"es-abstract": "^1.17.0-next.1"
}
},
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
- },
"regexpu-core": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
@@ -17007,14 +13360,6 @@
"jsesc": "~0.5.0"
}
},
- "release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
"remove-bom-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
@@ -17039,17 +13384,20 @@
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
},
"repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
},
"repeating": {
"version": "2.0.1",
@@ -17081,6 +13429,7 @@
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
@@ -17107,19 +13456,16 @@
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
}
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
},
"require-main-filename": {
"version": "1.0.1",
@@ -17131,39 +13477,21 @@
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
- "resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
- }
- }
- },
"resolve-dir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
"integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
"requires": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
}
},
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
- },
"resolve-options": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
@@ -17176,25 +13504,19 @@
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
},
"responselike": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "optional": true,
"requires": {
"lowercase-keys": "^1.0.0"
}
},
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
"resumer": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
@@ -17207,12 +13529,14 @@
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
"requires": {
"glob": "^7.1.3"
}
@@ -17221,6 +13545,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@@ -17230,41 +13555,22 @@
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
"integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
+ "dev": true,
"requires": {
"bn.js": "^4.11.1"
}
},
- "run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "requires": {
- "aproba": "^1.1.1"
- }
- },
"rustbn.js": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz",
"integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==",
"dev": true
},
- "rxjs": {
- "version": "6.6.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz",
- "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
},
"safe-event-emitter": {
"version": "1.0.1",
@@ -17279,6 +13585,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
"requires": {
"ret": "~0.1.10"
}
@@ -17286,17 +13593,8 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "requires": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- }
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
},
"scrypt-js": {
"version": "3.0.1",
@@ -17346,6 +13644,8 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
"integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"commander": "^2.8.1"
}
@@ -17356,16 +13656,6 @@
"integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==",
"dev": true
},
- "semver": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz",
- "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A=="
- },
- "semver-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
- },
"semver-greatest-satisfied-range": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
@@ -17379,6 +13669,8 @@
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "optional": true,
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
@@ -17399,6 +13691,8 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
"requires": {
"ms": "2.0.0"
},
@@ -17406,26 +13700,27 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
}
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true,
+ "optional": true
}
}
},
- "serialize-javascript": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
- "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
- },
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "optional": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
@@ -17437,6 +13732,8 @@
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz",
"integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==",
+ "dev": true,
+ "optional": true,
"requires": {
"body-parser": "^1.16.0",
"cors": "^2.8.1",
@@ -17448,7 +13745,8 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
},
"set-immediate-shim": {
"version": "1.0.1",
@@ -17460,6 +13758,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@@ -17471,6 +13770,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -17480,49 +13780,39 @@
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true,
+ "optional": true
},
"sha.js": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
"simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true,
+ "optional": true
},
"simple-get": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
+ "dev": true,
+ "optional": true,
"requires": {
"decompress-response": "^3.3.0",
"once": "^1.3.1",
@@ -17535,35 +13825,11 @@
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- }
- }
- },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
@@ -17579,6 +13845,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -17587,6 +13854,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -17595,6 +13863,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -17602,12 +13871,14 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
}
}
},
@@ -17615,6 +13886,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
"requires": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@@ -17625,6 +13897,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -17633,6 +13906,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -17641,6 +13915,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -17649,6 +13924,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -17661,6 +13937,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
"requires": {
"kind-of": "^3.2.0"
},
@@ -17669,81 +13946,24 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "solc": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.1.tgz",
- "integrity": "sha512-iKqNYps2p++x8L9sBg7JeAJb7EmW8VJ/2asAzwlLYcUhj86AzuWLe94UTSQHv1SSCCj/x6lya8twvXkZtlTbIQ==",
- "requires": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "dependencies": {
- "commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
- },
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- }
- }
- },
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
},
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
"requires": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
@@ -17756,6 +13976,7 @@
"version": "0.5.12",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
"integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+ "dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -17764,7 +13985,8 @@
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
},
"sparkles": {
"version": "1.0.1",
@@ -17772,54 +13994,11 @@
"integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
"dev": true
},
- "spawn-wrap": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
- "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
- "requires": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- },
- "dependencies": {
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
@@ -17828,12 +14007,14 @@
"spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
},
"spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -17842,25 +14023,23 @@
"spdx-license-ids": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
},
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
"requires": {
"extend-shallow": "^3.0.0"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -17876,31 +14055,8 @@
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- }
- }
- },
- "ssri": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
- "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
- "requires": {
- "figgy-pudding": "^3.5.1",
- "minipass": "^3.1.1"
- },
- "dependencies": {
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
}
}
},
@@ -17914,6 +14070,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@@ -17923,6 +14080,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -17932,59 +14090,9 @@
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "optional": true
},
"stream-exhaust": {
"version": "1.0.2",
@@ -17992,56 +14100,11 @@
"integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
"dev": true
},
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
"stream-shift": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+ "dev": true
},
"stream-to-pull-stream": {
"version": "1.7.3",
@@ -18064,12 +14127,15 @@
"strict-uri-encode": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true,
+ "optional": true
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -18091,6 +14157,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
"integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5"
@@ -18100,6 +14167,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
"integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5"
@@ -18109,24 +14177,16 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.2.0"
}
},
- "stringify-object": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
- "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
- "requires": {
- "get-own-enumerable-property-symbols": "^3.0.0",
- "is-obj": "^1.0.1",
- "is-regexp": "^1.0.0"
- }
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -18144,37 +14204,26 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
"integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "optional": true,
"requires": {
"is-natural-number": "^4.0.1"
}
},
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
- },
"strip-hex-prefix": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
"integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
+ "dev": true,
"requires": {
"is-hex-prefixed": "1.0.0"
}
},
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
- },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
},
"sver-compat": {
"version": "1.5.0",
@@ -18190,6 +14239,8 @@
"version": "0.1.39",
"resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz",
"integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==",
+ "dev": true,
+ "optional": true,
"requires": {
"bluebird": "^3.5.0",
"buffer": "^5.0.5",
@@ -18208,12 +14259,16 @@
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true,
+ "optional": true
},
"got": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
"integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
+ "dev": true,
+ "optional": true,
"requires": {
"decompress-response": "^3.2.0",
"duplexer3": "^0.1.4",
@@ -18234,79 +14289,29 @@
"p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
- "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="
+ "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
+ "dev": true,
+ "optional": true
},
"prepend-http": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true,
+ "optional": true
},
"url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "optional": true,
"requires": {
"prepend-http": "^1.0.1"
}
}
}
},
- "symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
- },
"tape": {
"version": "4.13.3",
"resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz",
@@ -18351,6 +14356,8 @@
"version": "4.4.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
"integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
+ "dev": true,
+ "optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
@@ -18365,6 +14372,8 @@
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"minimist": "^1.2.5"
}
@@ -18375,6 +14384,8 @@
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
"integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dev": true,
+ "optional": true,
"requires": {
"bl": "^1.0.0",
"buffer-alloc": "^1.2.0",
@@ -18388,12 +14399,16 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -18407,85 +14422,33 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
- "temp": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.1.tgz",
- "integrity": "sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA==",
- "requires": {
- "rimraf": "~2.6.2"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- }
- },
- "terser-webpack-plugin": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz",
- "integrity": "sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA==",
- "requires": {
- "cacache": "^13.0.1",
- "find-cache-dir": "^3.2.0",
- "jest-worker": "^24.9.0",
- "schema-utils": "^2.6.1",
- "serialize-javascript": "^2.1.2",
- "source-map": "^0.6.1",
- "terser": "^4.4.3",
- "webpack-sources": "^1.4.3"
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
- },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -18494,12 +14457,14 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -18513,12 +14478,14 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -18544,15 +14511,9 @@
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
- },
- "timers-browserify": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
- "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
- "requires": {
- "setimmediate": "^1.0.4"
- }
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true,
+ "optional": true
},
"tmp": {
"version": "0.1.0",
@@ -18573,15 +14534,12 @@
"is-negated-glob": "^1.0.0"
}
},
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
- },
"to-buffer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true,
+ "optional": true
},
"to-fast-properties": {
"version": "1.0.3",
@@ -18593,6 +14551,7 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -18601,6 +14560,7 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -18610,12 +14570,15 @@
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+ "dev": true,
+ "optional": true
},
"to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
"requires": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@@ -18627,6 +14590,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -18644,12 +14608,15 @@
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "optional": true
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
@@ -18661,20 +14628,11 @@
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
- "tslib": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
- "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
- },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
@@ -18694,25 +14652,15 @@
"type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+ "dev": true
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "optional": true,
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -18721,12 +14669,14 @@
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
"requires": {
"is-typedarray": "^1.0.0"
}
@@ -18755,12 +14705,16 @@
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true,
+ "optional": true
},
"unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
"integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "optional": true,
"requires": {
"buffer": "^5.2.1",
"through": "^2.3.8"
@@ -18775,7 +14729,9 @@
"underscore": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
- "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
+ "dev": true,
+ "optional": true
},
"undertaker": {
"version": "1.2.1",
@@ -18804,6 +14760,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
@@ -18811,22 +14768,6 @@
"set-value": "^2.0.1"
}
},
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
"unique-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
@@ -18840,7 +14781,9 @@
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "optional": true
},
"unorm": {
"version": "1.6.0",
@@ -18851,12 +14794,15 @@
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true,
+ "optional": true
},
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
"requires": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@@ -18866,6 +14812,7 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
"requires": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@@ -18876,6 +14823,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
"requires": {
"isarray": "1.0.0"
}
@@ -18885,24 +14833,28 @@
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
}
}
},
"upath": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
"requires": {
"punycode": "^2.1.0"
}
@@ -18910,28 +14862,15 @@
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
- }
- }
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
},
"url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "optional": true,
"requires": {
"prepend-http": "^2.0.0"
}
@@ -18939,42 +14878,35 @@
"url-set-query": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz",
- "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk="
+ "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=",
+ "dev": true,
+ "optional": true
},
"url-to-options": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "dev": true,
+ "optional": true
},
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
},
"utf8": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ=="
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
- }
- }
+ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
+ "dev": true,
+ "optional": true
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"util.promisify": {
"version": "1.0.1",
@@ -18991,17 +14923,15 @@
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true,
+ "optional": true
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
- "v8-compile-cache": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
- "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ=="
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
},
"v8flags": {
"version": "3.2.0",
@@ -19016,6 +14946,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -19030,12 +14961,15 @@
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true,
+ "optional": true
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
@@ -19145,128 +15079,12 @@
}
}
},
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
- },
- "watchpack": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
- "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.0"
- },
- "dependencies": {
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "optional": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
- "optional": true
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "optional": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chokidar": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
- "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
- "optional": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.4.0"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "optional": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "optional": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "optional": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "optional": true
- },
- "readdirp": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
- "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
- "optional": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "optional": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "watchpack-chokidar2": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
- "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
- "optional": true,
- "requires": {
- "chokidar": "^2.1.8"
- }
- },
"web3": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3/-/web3-1.2.4.tgz",
"integrity": "sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/node": "^12.6.1",
"web3-bzz": "1.2.4",
@@ -19279,9 +15097,11 @@
},
"dependencies": {
"@types/node": {
- "version": "12.12.53",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz",
- "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ=="
+ "version": "12.19.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.3.tgz",
+ "integrity": "sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19289,6 +15109,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.4.tgz",
"integrity": "sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/node": "^10.12.18",
"got": "9.6.0",
@@ -19299,7 +15121,9 @@
"@types/node": {
"version": "10.17.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz",
- "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ=="
+ "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19307,6 +15131,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.4.tgz",
"integrity": "sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/bignumber.js": "^5.0.0",
"@types/bn.js": "^4.11.4",
@@ -19320,7 +15146,9 @@
"@types/node": {
"version": "12.12.53",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz",
- "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ=="
+ "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19328,6 +15156,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz",
"integrity": "sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw==",
+ "dev": true,
+ "optional": true,
"requires": {
"underscore": "1.9.1",
"web3-eth-iban": "1.2.4",
@@ -19338,6 +15168,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.4.tgz",
"integrity": "sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A==",
+ "dev": true,
+ "optional": true,
"requires": {
"underscore": "1.9.1",
"web3-core-helpers": "1.2.4",
@@ -19350,6 +15182,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz",
"integrity": "sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw==",
+ "dev": true,
+ "optional": true,
"requires": {
"any-promise": "1.3.0",
"eventemitter3": "3.1.2"
@@ -19359,6 +15193,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz",
"integrity": "sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg==",
+ "dev": true,
+ "optional": true,
"requires": {
"underscore": "1.9.1",
"web3-core-helpers": "1.2.4",
@@ -19371,6 +15207,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz",
"integrity": "sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw==",
+ "dev": true,
+ "optional": true,
"requires": {
"eventemitter3": "3.1.2",
"underscore": "1.9.1",
@@ -19381,6 +15219,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.4.tgz",
"integrity": "sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA==",
+ "dev": true,
+ "optional": true,
"requires": {
"underscore": "1.9.1",
"web3-core": "1.2.4",
@@ -19401,6 +15241,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz",
"integrity": "sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg==",
+ "dev": true,
+ "optional": true,
"requires": {
"ethers": "4.0.0-beta.3",
"underscore": "1.9.1",
@@ -19410,17 +15252,23 @@
"@types/node": {
"version": "10.17.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz",
- "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ=="
+ "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ==",
+ "dev": true,
+ "optional": true
},
"aes-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
+ "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=",
+ "dev": true,
+ "optional": true
},
"elliptic": {
"version": "6.3.3",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
"integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
@@ -19432,6 +15280,8 @@
"version": "4.0.0-beta.3",
"resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz",
"integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/node": "^10.3.2",
"aes-js": "3.0.0",
@@ -19449,6 +15299,8 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
"integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "optional": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.0"
@@ -19457,22 +15309,30 @@
"js-sha3": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
+ "dev": true,
+ "optional": true
},
"scrypt-js": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz",
- "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q="
+ "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=",
+ "dev": true,
+ "optional": true
},
"setimmediate": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz",
- "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48="
+ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=",
+ "dev": true,
+ "optional": true
},
"uuid": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
- "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w="
+ "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19480,6 +15340,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz",
"integrity": "sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw==",
+ "dev": true,
+ "optional": true,
"requires": {
"@web3-js/scrypt-shim": "^0.1.0",
"any-promise": "1.3.0",
@@ -19499,6 +15361,8 @@
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz",
"integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.11.6",
"elliptic": "^6.4.0",
@@ -19508,7 +15372,9 @@
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19516,6 +15382,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz",
"integrity": "sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/bn.js": "^4.11.4",
"underscore": "1.9.1",
@@ -19532,6 +15400,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz",
"integrity": "sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw==",
+ "dev": true,
+ "optional": true,
"requires": {
"eth-ens-namehash": "2.0.8",
"underscore": "1.9.1",
@@ -19547,6 +15417,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz",
"integrity": "sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "4.11.8",
"web3-utils": "1.2.4"
@@ -19555,7 +15427,9 @@
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19563,6 +15437,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz",
"integrity": "sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw==",
+ "dev": true,
+ "optional": true,
"requires": {
"@types/node": "^12.6.1",
"web3-core": "1.2.4",
@@ -19575,7 +15451,9 @@
"@types/node": {
"version": "12.12.53",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz",
- "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ=="
+ "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -19583,6 +15461,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.4.tgz",
"integrity": "sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A==",
+ "dev": true,
+ "optional": true,
"requires": {
"web3-core": "1.2.4",
"web3-core-method": "1.2.4",
@@ -19853,6 +15733,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.4.tgz",
"integrity": "sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw==",
+ "dev": true,
+ "optional": true,
"requires": {
"web3-core-helpers": "1.2.4",
"xhr2-cookies": "1.1.0"
@@ -19862,6 +15744,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz",
"integrity": "sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og==",
+ "dev": true,
+ "optional": true,
"requires": {
"oboe": "2.1.4",
"underscore": "1.9.1",
@@ -19872,6 +15756,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz",
"integrity": "sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"@web3-js/websocket": "^1.0.29",
"underscore": "1.9.1",
@@ -19882,6 +15768,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.4.tgz",
"integrity": "sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"web3-core": "1.2.4",
"web3-core-method": "1.2.4",
@@ -19893,6 +15781,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.4.tgz",
"integrity": "sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ==",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "4.11.8",
"eth-lib": "0.2.7",
@@ -19907,12 +15797,16 @@
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true,
+ "optional": true
},
"eth-lib": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz",
"integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=",
+ "dev": true,
+ "optional": true,
"requires": {
"bn.js": "^4.11.6",
"elliptic": "^6.4.0",
@@ -19921,568 +15815,6 @@
}
}
},
- "webpack": {
- "version": "4.41.5",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz",
- "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==",
- "requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/wasm-edit": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "acorn": "^6.2.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.1.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.1",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.6.0",
- "webpack-sources": "^1.4.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
- "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
- },
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "serialize-javascript": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
- "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz",
- "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==",
- "requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^3.1.0",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
- }
- }
- },
- "webpack-bundle-size-analyzer": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/webpack-bundle-size-analyzer/-/webpack-bundle-size-analyzer-3.1.0.tgz",
- "integrity": "sha512-8WlTT6uuCxZgZYNnCB0pRGukWRGH+Owg+HsqQUe1Zexakdno1eDYO+lE7ihBo9G0aCCZCJa8JWjYr9eLYfZrBA==",
- "requires": {
- "commander": "^2.19.0",
- "filesize": "^3.6.1",
- "humanize": "0.0.9"
- }
- },
- "webpack-cli": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz",
- "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==",
- "requires": {
- "chalk": "2.4.2",
- "cross-spawn": "6.0.5",
- "enhanced-resolve": "4.1.0",
- "findup-sync": "3.0.0",
- "global-modules": "2.0.0",
- "import-local": "2.0.0",
- "interpret": "1.2.0",
- "loader-utils": "1.2.3",
- "supports-color": "6.1.0",
- "v8-compile-cache": "2.0.3",
- "yargs": "13.2.4"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
- },
- "enhanced-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
- "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "requires": {
- "global-prefix": "^3.0.0"
- }
- },
- "global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "requires": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- }
- },
- "interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
- },
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "v8-compile-cache": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
- "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w=="
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
- },
- "yargs": {
- "version": "13.2.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
- "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "os-locale": "^3.1.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.0"
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
"websocket": {
"version": "1.0.29",
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.29.tgz",
@@ -20523,6 +15855,7 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
"requires": {
"isexe": "^2.0.0"
}
@@ -20533,32 +15866,6 @@
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
"dev": true
},
- "which-pm-runs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
- "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
- },
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "requires": {
- "errno": "~0.1.7"
- }
- },
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
@@ -20572,41 +15879,15 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "requires": {
- "mkdirp": "^0.5.1"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
},
"ws": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "optional": true,
"requires": {
"async-limiter": "~1.0.0",
"safe-buffer": "~5.1.0",
@@ -20616,7 +15897,9 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
}
}
},
@@ -20624,6 +15907,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz",
"integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==",
+ "dev": true,
"requires": {
"global": "~4.3.0",
"is-function": "^1.0.1",
@@ -20635,6 +15919,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz",
"integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==",
+ "dev": true,
+ "optional": true,
"requires": {
"buffer-to-arraybuffer": "^0.0.5",
"object-assign": "^4.1.1",
@@ -20649,6 +15935,8 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz",
"integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==",
+ "dev": true,
+ "optional": true,
"requires": {
"xhr-request": "^1.1.0"
}
@@ -20657,6 +15945,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz",
"integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=",
+ "dev": true,
+ "optional": true,
"requires": {
"cookiejar": "^2.1.1"
}
@@ -20664,12 +15954,15 @@
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
- "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=",
+ "dev": true,
+ "optional": true
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
},
"y18n": {
"version": "3.2.1",
@@ -20680,17 +15973,14 @@
"yaeti": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
- "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
+ "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
+ "dev": true
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "yaml": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
},
"yargs": {
"version": "7.1.1",
@@ -20723,182 +16013,12 @@
"object.assign": "^4.1.0"
}
},
- "yargs-unparser": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
- "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
- "requires": {
- "flat": "^4.1.0",
- "lodash": "^4.17.15",
- "yargs": "^13.3.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
- },
- "yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "optional": true,
"requires": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
@@ -21105,6 +16225,183 @@
"har-schema": "^2.0.0"
}
},
+ "hardhat": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.0.2.tgz",
+ "integrity": "sha512-P8SMYsWeC0OakmHUAgL9STalidQ1bAHFHFroPyvnfljei7EPHaIQpS6QursoZ+KVNkPTnKC+9m1Lky8nnKIjuw==",
+ "dev": true,
+ "requires": {
+ "@nomiclabs/ethereumjs-vm": "^4.1.1",
+ "@sentry/node": "^5.18.1",
+ "@solidity-parser/parser": "^0.7.1",
+ "@types/bn.js": "^4.11.5",
+ "@types/lru-cache": "^5.1.0",
+ "abort-controller": "^3.0.0",
+ "adm-zip": "^0.4.16",
+ "ansi-escapes": "^4.3.0",
+ "chalk": "^2.4.2",
+ "chokidar": "^3.4.0",
+ "ci-info": "^2.0.0",
+ "debug": "^4.1.1",
+ "enquirer": "^2.3.0",
+ "env-paths": "^2.2.0",
+ "eth-sig-util": "^2.5.2",
+ "ethereum-cryptography": "^0.1.2",
+ "ethereumjs-abi": "^0.6.8",
+ "ethereumjs-account": "^3.0.0",
+ "ethereumjs-block": "^2.2.0",
+ "ethereumjs-common": "^1.5.0",
+ "ethereumjs-tx": "^2.1.1",
+ "ethereumjs-util": "^6.1.0",
+ "find-up": "^2.1.0",
+ "fp-ts": "1.19.3",
+ "fs-extra": "^7.0.1",
+ "glob": "^7.1.3",
+ "immutable": "^4.0.0-rc.12",
+ "io-ts": "1.10.4",
+ "lodash": "^4.17.11",
+ "merkle-patricia-tree": "^3.0.0",
+ "mocha": "^7.1.2",
+ "node-fetch": "^2.6.0",
+ "qs": "^6.7.0",
+ "raw-body": "^2.4.1",
+ "resolve": "1.17.0",
+ "semver": "^6.3.0",
+ "slash": "^3.0.0",
+ "solc": "0.7.3",
+ "source-map-support": "^0.5.13",
+ "stacktrace-parser": "^0.1.10",
+ "true-case-path": "^2.2.1",
+ "tsort": "0.0.1",
+ "uuid": "^3.3.2",
+ "ws": "^7.2.1"
+ },
+ "dependencies": {
+ "@solidity-parser/parser": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.7.1.tgz",
+ "integrity": "sha512-5ma2uuwPAEX1TPl2rAPAAuGlBkKnn2oUKQvnhTFlDIB8U/KDWX77FpHtL6Rcz+OwqSCWx9IClxACgyIEJ/GhIw==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+ "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
+ "dev": true
+ },
+ "ethereumjs-util": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
+ "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
+ "dev": true,
+ "requires": {
+ "@types/bn.js": "^4.11.3",
+ "bn.js": "^4.11.0",
+ "create-hash": "^1.1.2",
+ "elliptic": "^6.5.2",
+ "ethereum-cryptography": "^0.1.3",
+ "ethjs-util": "0.1.6",
+ "rlp": "^2.2.3"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "solc": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
+ "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
+ "dev": true,
+ "requires": {
+ "command-exists": "^1.2.8",
+ "commander": "3.0.2",
+ "follow-redirects": "^1.12.1",
+ "fs-extra": "^0.30.0",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "require-from-string": "^2.0.0",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "hardhat-gas-reporter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.0.tgz",
+ "integrity": "sha512-ckGLu62GSZDqTemO5EgSUdjn+Dyk4X20nryZ0gutgVnjfrTwpV7/AXoDIj93cxIGMLmui09EQR0QB0D0OIssdA==",
+ "dev": true,
+ "requires": {
+ "eth-gas-reporter": "^0.2.19"
+ }
+ },
+ "hardhat-typechain": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/hardhat-typechain/-/hardhat-typechain-0.3.3.tgz",
+ "integrity": "sha512-NrqP7Zng28prV3YT0lXoo1pXtZxoNCMfiZIWkf1HXjjID42JLLfSOTsvlb0okDMpz4tJaEEkgADJO69sKZxw+Q==",
+ "dev": true
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -21232,9 +16529,9 @@
},
"dependencies": {
"@types/node": {
- "version": "10.17.42",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.42.tgz",
- "integrity": "sha512-HElxYF7C/MSkuvlaHB2c+82zhXiuO49Cq056Dol8AQuTph7oJtduo2n6J8rFa+YhJyNgQ/Lm20ZaxqD0vxU0+Q==",
+ "version": "10.17.44",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz",
+ "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw==",
"dev": true
}
}
@@ -21374,6 +16671,12 @@
"integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==",
"dev": true
},
+ "immutable": {
+ "version": "4.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0-rc.12.tgz",
+ "integrity": "sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A==",
+ "dev": true
+ },
"import-fresh": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
@@ -24364,6 +19667,23 @@
}
}
},
+ "stacktrace-parser": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
+ "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.7.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
+ "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
+ "dev": true
+ }
+ }
+ },
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -24697,6 +20017,254 @@
}
}
},
+ "temp-hardhat-etherscan": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/temp-hardhat-etherscan/-/temp-hardhat-etherscan-2.0.2.tgz",
+ "integrity": "sha512-q9+OMPXlsXZ+2fnF+Xmvv0J9vNJChwOXVGJIATiDJr7Qe8LzTwgs55C4l4NKMWPLe4PE9UjcQMVntRfXGTF9vA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abi": "^5.0.2",
+ "@ethersproject/address": "^5.0.2",
+ "cbor": "^5.0.2",
+ "fs-extra": "^7.0.1",
+ "lodash": "^4.17.11",
+ "node-fetch": "^2.6.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "@ethersproject/abi": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
+ "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/address": "^5.0.4",
+ "@ethersproject/bignumber": "^5.0.7",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/constants": "^5.0.4",
+ "@ethersproject/hash": "^5.0.4",
+ "@ethersproject/keccak256": "^5.0.3",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.3",
+ "@ethersproject/strings": "^5.0.4"
+ }
+ },
+ "@ethersproject/abstract-provider": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz",
+ "integrity": "sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.0.7",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/networks": "^5.0.3",
+ "@ethersproject/properties": "^5.0.3",
+ "@ethersproject/transactions": "^5.0.5",
+ "@ethersproject/web": "^5.0.6"
+ }
+ },
+ "@ethersproject/abstract-signer": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz",
+ "integrity": "sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abstract-provider": "^5.0.4",
+ "@ethersproject/bignumber": "^5.0.7",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.3"
+ }
+ },
+ "@ethersproject/address": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz",
+ "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.0.7",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/keccak256": "^5.0.3",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/rlp": "^5.0.3",
+ "bn.js": "^4.4.0"
+ }
+ },
+ "@ethersproject/base64": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.4.tgz",
+ "integrity": "sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4"
+ }
+ },
+ "@ethersproject/bignumber": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz",
+ "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5",
+ "bn.js": "^4.4.0"
+ }
+ },
+ "@ethersproject/bytes": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz",
+ "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.0.5"
+ }
+ },
+ "@ethersproject/constants": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz",
+ "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.0.7"
+ }
+ },
+ "@ethersproject/hash": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.6.tgz",
+ "integrity": "sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abstract-signer": "^5.0.6",
+ "@ethersproject/address": "^5.0.5",
+ "@ethersproject/bignumber": "^5.0.8",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/keccak256": "^5.0.3",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.4",
+ "@ethersproject/strings": "^5.0.4"
+ }
+ },
+ "@ethersproject/keccak256": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz",
+ "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4",
+ "js-sha3": "0.5.7"
+ }
+ },
+ "@ethersproject/logger": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz",
+ "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==",
+ "dev": true
+ },
+ "@ethersproject/networks": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.4.tgz",
+ "integrity": "sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.0.5"
+ }
+ },
+ "@ethersproject/properties": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz",
+ "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.0.5"
+ }
+ },
+ "@ethersproject/rlp": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz",
+ "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5"
+ }
+ },
+ "@ethersproject/signing-key": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz",
+ "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.3",
+ "elliptic": "6.5.3"
+ }
+ },
+ "@ethersproject/strings": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz",
+ "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/constants": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5"
+ }
+ },
+ "@ethersproject/transactions": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz",
+ "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/address": "^5.0.4",
+ "@ethersproject/bignumber": "^5.0.7",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/constants": "^5.0.4",
+ "@ethersproject/keccak256": "^5.0.3",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.3",
+ "@ethersproject/rlp": "^5.0.3",
+ "@ethersproject/signing-key": "^5.0.4"
+ }
+ },
+ "@ethersproject/web": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.9.tgz",
+ "integrity": "sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/base64": "^5.0.3",
+ "@ethersproject/bytes": "^5.0.4",
+ "@ethersproject/logger": "^5.0.5",
+ "@ethersproject/properties": "^5.0.3",
+ "@ethersproject/strings": "^5.0.4"
+ }
+ },
+ "elliptic": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "js-sha3": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
+ "dev": true
+ }
+ }
+ },
"test-value": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
@@ -24744,9 +20312,9 @@
},
"dependencies": {
"@types/node": {
- "version": "8.10.65",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.65.tgz",
- "integrity": "sha512-xdcqtQl1g3p/49kmcj7ZixPWOcNHA1tYNz+uN0PJEcgtN6zywK74aacTnd3eFGPuBpD7kK8vowmMRkUt6jHU/Q==",
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==",
"dev": true
}
}
@@ -24844,6 +20412,12 @@
"escape-string-regexp": "^1.0.2"
}
},
+ "true-case-path": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz",
+ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==",
+ "dev": true
+ },
"ts-essentials": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz",
diff --git a/package.json b/package.json
index 931b1186..cdcb78dd 100644
--- a/package.json
+++ b/package.json
@@ -4,56 +4,70 @@
"description": "Aave Protocol V2 smart contracts",
"scripts": {
"run-env": "npm i && tail -f /dev/null",
- "buidler": "buidler",
- "buidler:kovan": "buidler --network kovan",
- "buidler:ropsten": "buidler--network ropsten",
- "buidler:main": "buidler --network main",
- "buidler:docker": "buidler --network buidlerevm_docker",
- "buidler help": "buidler help",
- "compile": "SKIP_LOAD=true buidler compile",
- "types-gen": "npm run compile -- --force && typechain --target ethers-v5 --outDir ./types './artifacts/*.json'",
- "test": "buidler test",
- "test-scenarios": "buidler test test/__setup.spec.ts test/scenario.spec.ts",
- "aave:evm:dev:migration": "buidler aave:dev",
- "aave:evm:full:migration": "buidler aave:full",
- "aave:docker:dev:migration": "npm run buidler:docker -- aave:dev",
- "aave:docker:full:migration": "npm run buidler:docker -- aave:full",
- "aave:kovan:dev:migration": "npm run buidler:kovan -- aave:dev --verify",
- "aave:kovan:full:migration": "npm run buidler:kovan -- aave:full --verify",
- "aave:ropsten:dev:migration": "npm run buidler:ropsten -- aave:dev --verify",
- "aave:ropsten:full:migration": "npm run buidler:ropsten -- aave:full --verify",
- "aave:main:dev:migration": "npm run buidler:main -- aave:dev --verify",
- "aave:main:full:migration": "npm run buidler:main -- aave:full --verify",
- "uniswap:evm:dev:migration": "buidler uniswap:dev",
- "uniswap:evm:full:migration": "buidler uniswap:full --verify",
- "uniswap:kovan:dev:migration": "npm run buidler:kovan -- uniswap:dev --verify",
- "uniswap:kovan:full:migration": "npm run buidler:kovan -- uniswap:full --verify",
- "uniswap:ropsten:dev:migration": "npm run buidler:ropsten -- uniswap:dev --verify",
- "uniswap:ropsten:full:migration": "npm run buidler:ropsten -- uniswap:full --verify",
- "uniswap:main:dev:migration": "npm run buidler:main -- uniswap:dev --verify",
- "uniswap:main:full:migration": "npm run buidler:main -- uniswap:full --verify",
- "test-repay-with-collateral": "buidler test test/__setup.spec.ts test/repay-with-collateral.spec.ts",
- "test-liquidate-with-collateral": "buidler test test/__setup.spec.ts test/flash-liquidation-with-collateral.spec.ts",
- "test-transfers": "buidler test test/__setup.spec.ts test/atoken-transfer.spec.ts",
- "test-flash": "buidler test test/__setup.spec.ts test/flashloan.spec.ts",
- "test-liquidate": "buidler test test/__setup.spec.ts test/liquidation-atoken.spec.ts",
- "test-deploy": "buidler test test/__setup.spec.ts test/test-init.spec.ts",
- "test-pausable": "buidler test test/__setup.spec.ts test/pausable-functions.spec.ts",
- "test-permit": "buidler test test/__setup.spec.ts test/atoken-permit.spec.ts",
- "test-stable-and-atokens": "buidler test test/__setup.spec.ts test/atoken-transfer.spec.ts test/stable-token.spec.ts",
- "test-subgraph:scenarios": "buidler --network buidlerevm_docker test test/__setup.spec.ts test/subgraph-scenarios.spec.ts",
- "dev:coverage": "buidler coverage --network coverage",
- "dev:deployment": "buidler dev-deployment",
- "dev:deployExample": "buidler deploy-Example",
+ "hardhat": "hardhat",
+ "hardhat:kovan": "hardhat --network kovan",
+ "hardhat:ropsten": "hardhat--network ropsten",
+ "hardhat:main": "hardhat --network main",
+ "hardhat:docker": "hardhat --network hardhatevm_docker",
+ "compile": "SKIP_LOAD=true hardhat compile",
+ "test": "SKIP_LOAD=true TS_NODE_TRANSPILE_ONLY=1 hardhat test",
+ "test-scenarios": "npm run test -- test/__setup.spec.ts test/scenario.spec.ts",
+ "aave:evm:dev:migration": "hardhat aave:dev",
+ "aave:evm:full:migration": "hardhat aave:full",
+ "aave:docker:dev:migration": "npm run hardhat:docker -- aave:dev",
+ "aave:docker:full:migration": "npm run hardhat:docker -- aave:full",
+ "aave:kovan:dev:migration": "npm run hardhat:kovan -- aave:dev --verify",
+ "aave:kovan:full:migration": "npm run hardhat:kovan -- aave:full --verify",
+ "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave",
+ "aave:ropsten:dev:migration": "npm run hardhat:ropsten -- aave:dev --verify",
+ "aave:ropsten:full:migration": "npm run hardhat:ropsten -- aave:full --verify",
+ "aave:main:dev:migration": "npm run hardhat:main -- aave:dev --verify",
+ "aave:main:full:migration": "npm run hardhat:main -- aave:full --verify",
+ "uniswap:evm:dev:migration": "hardhat uniswap:dev",
+ "uniswap:evm:full:migration": "hardhat uniswap:full --verify",
+ "uniswap:kovan:dev:migration": "npm run hardhat:kovan -- uniswap:dev --verify",
+ "uniswap:kovan:full:migration": "npm run hardhat:kovan -- uniswap:full --verify",
+ "uniswap:ropsten:dev:migration": "npm run hardhat:ropsten -- uniswap:dev --verify",
+ "uniswap:ropsten:full:migration": "npm run hardhat:ropsten -- uniswap:full --verify",
+ "uniswap:main:dev:migration": "npm run hardhat:main -- uniswap:dev --verify",
+ "uniswap:main:full:migration": "npm run hardhat:main -- uniswap:full --verify",
+ "test-repay-with-collateral": "hardhat test test/__setup.spec.ts test/repay-with-collateral.spec.ts",
+ "test-liquidate-with-collateral": "hardhat test test/__setup.spec.ts test/flash-liquidation-with-collateral.spec.ts",
+ "test-liquidate-underlying": "hardhat test test/__setup.spec.ts test/liquidation-underlying.spec.ts",
+ "test-configurator": "hardhat test test/__setup.spec.ts test/configurator.spec.ts",
+ "test-transfers": "hardhat test test/__setup.spec.ts test/atoken-transfer.spec.ts",
+ "test-flash": "hardhat test test/__setup.spec.ts test/flashloan.spec.ts",
+ "test-liquidate": "hardhat test test/__setup.spec.ts test/liquidation-atoken.spec.ts",
+ "test-deploy": "hardhat test test/__setup.spec.ts test/test-init.spec.ts",
+ "test-pausable": "hardhat test test/__setup.spec.ts test/pausable-functions.spec.ts",
+ "test-permit": "hardhat test test/__setup.spec.ts test/atoken-permit.spec.ts",
+ "test-stable-and-atokens": "hardhat test test/__setup.spec.ts test/atoken-transfer.spec.ts test/stable-token.spec.ts",
+ "test-subgraph:scenarios": "hardhat --network hardhatevm_docker test test/__setup.spec.ts test/subgraph-scenarios.spec.ts",
+ "test-weth": "hardhat test test/__setup.spec.ts test/weth-gateway.spec.ts",
+ "dev:coverage": "buidler compile --force && buidler coverage --network coverage",
+ "dev:deployment": "hardhat dev-deployment",
+ "dev:deployExample": "hardhat deploy-Example",
"dev:prettier": "prettier --write .",
- "ci:test": "npm run compile && npm run types-gen && npm run test",
- "ci:clean": "rm -rf ./artifacts ./cache ./types"
+ "ci:test": "npm run compile && npm run test",
+ "ci:clean": "rm -rf ./artifacts ./cache ./types",
+ "print-contracts:kovan": "npm run hardhat:kovan -- print-contracts",
+ "print-contracts:main": "npm run hardhat:main -- print-contracts",
+ "print-contracts:ropsten": "npm run hardhat:main -- print-contracts",
+ "dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider",
+ "kovan:verify": "npm run hardhat:kovan verify:general -- --all --pool Aave",
+ "ropsten:verify": "npm run hardhat:ropsten verify:general -- --all --pool Aave",
+ "mainnet:verify": "npm run hardhat:main verify:general -- --all --pool Aave",
+ "kovan:verify:tokens": "npm run hardhat:kovan verify:tokens -- --pool Aave",
+ "ropsten:verify:tokens": "npm run hardhat:ropsten verify:tokens -- --pool Aave",
+ "mainnet:verify:tokens": "npm run hardhat:main verify:tokens -- --pool Aave"
},
"devDependencies": {
"@nomiclabs/buidler": "^1.4.7",
"@nomiclabs/buidler-ethers": "2.0.0",
"@nomiclabs/buidler-etherscan": "^2.1.0",
"@nomiclabs/buidler-waffle": "2.0.0",
+ "@nomiclabs/hardhat-ethers": "^2.0.0",
+ "@nomiclabs/hardhat-waffle": "^2.0.0",
"@openzeppelin/contracts": "3.1.0",
"@typechain/ethers-v4": "1.0.0",
"@typechain/ethers-v5": "^1.0.0",
@@ -65,29 +79,33 @@
"@types/mocha": "7.0.2",
"@types/node": "14.0.5",
"bignumber.js": "9.0.0",
- "buidler-gas-reporter": "^0.1.4",
"buidler-typechain": "0.1.1",
"chai": "4.2.0",
"chai-bignumber": "3.0.0",
"chai-bn": "^0.2.1",
+ "dotenv": "^8.2.0",
"eth-sig-util": "2.5.3",
"ethereum-waffle": "3.0.2",
"ethereumjs-util": "7.0.2",
"ethers": "5.0.8",
"globby": "^11.0.1",
+ "hardhat": "^2.0.2",
+ "hardhat-gas-reporter": "^1.0.0",
+ "hardhat-typechain": "^0.3.3",
"husky": "^4.2.5",
"lowdb": "1.0.0",
"prettier": "^2.0.5",
"prettier-plugin-solidity": "^1.0.0-alpha.53",
"pretty-quick": "^2.0.1",
"solidity-coverage": "0.7.10",
+ "temp-hardhat-etherscan": "^2.0.2",
"ts-generator": "0.0.8",
- "ts-node": "8.10.2",
+ "ts-node": "^8.10.2",
"tslint": "^6.1.2",
"tslint-config-prettier": "^1.18.0",
"tslint-plugin-prettier": "^2.3.0",
"typechain": "2.0.0",
- "typescript": "3.9.3"
+ "typescript": "^3.9.3"
},
"husky": {
"hooks": {
diff --git a/specs/harness/LendingPoolHarnessForVariableDebtToken.sol b/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
index 7ecde340..f5ea9be1 100644
--- a/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
+++ b/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
@@ -8,6 +8,9 @@ import {UserConfiguration} from '../../contracts/libraries/configuration/UserCon
import {ReserveLogic} from '../../contracts/libraries/logic/ReserveLogic.sol';
import {ILendingPool} from '../../contracts/interfaces/ILendingPool.sol';
import {LendingPool} from '../../contracts/lendingpool/LendingPool.sol';
+import {
+ ILendingPoolAddressesProvider
+} from '../../contracts/interfaces/ILendingPoolAddressesProvider.sol';
/*
Certora: Harness that delegates calls to the original LendingPool.
@@ -24,27 +27,13 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
) external override {
originalPool.deposit(asset, amount, onBehalfOf, referralCode);
}
-
- function withdraw(address reserve, uint256 amount, address to) external override {
- originalPool.withdraw(reserve, amount, to);
- }
- function getBorrowAllowance(
- address fromUser,
- address toUser,
+ function withdraw(
address asset,
- uint256 interestRateMode
- ) external override view returns (uint256) {
- return originalPool.getBorrowAllowance(fromUser, toUser, asset, interestRateMode);
- }
-
- function delegateBorrowAllowance(
- address asset,
- address user,
- uint256 interestRateMode,
- uint256 amount
+ uint256 amount,
+ address to
) external override {
- originalPool.delegateBorrowAllowance(asset, user, interestRateMode, amount);
+ originalPool.withdraw(asset, amount, to);
}
function borrow(
@@ -193,12 +182,12 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
address receiver,
address[] calldata assets,
uint256[] calldata amounts,
- uint256 mode,
+ uint256[] calldata modes,
address onBehalfOf,
bytes calldata params,
uint16 referralCode
) external override {
- originalPool.flashLoan(receiver, assets, amounts, mode, onBehalfOf, params, referralCode);
+ originalPool.flashLoan(receiver, assets, amounts, modes, onBehalfOf, params, referralCode);
}
function finalizeTransfer(
@@ -211,4 +200,8 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
) external override {
originalPool.finalizeTransfer(asset, from, to, amount, balanceFromAfter, balanceToBefore);
}
+
+ function getAddressesProvider() external override view returns (ILendingPoolAddressesProvider) {
+ return originalPool.getAddressesProvider();
+ }
}
diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts
new file mode 100644
index 00000000..b03ca70d
--- /dev/null
+++ b/tasks/deployments/deploy-UiPoolDataProvider.ts
@@ -0,0 +1,27 @@
+import {task} from '@nomiclabs/buidler/config';
+
+import {UiPoolDataProviderFactory} from '../../types';
+import {verifyContract} from '../../helpers/etherscan-verification';
+import {eContractid} from '../../helpers/types';
+
+task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider contract`)
+ .addFlag('verify', 'Verify UiPoolDataProvider contract via Etherscan API.')
+ .setAction(async ({verify}, localBRE) => {
+ await localBRE.run('set-bre');
+
+ if (!localBRE.network.config.chainId) {
+ throw new Error('INVALID_CHAIN_ID');
+ }
+
+ console.log(`\n- UiPoolDataProvider deployment`);
+
+ console.log(`\tDeploying UiPoolDataProvider implementation ...`);
+ const uiPoolDataProvider = await new UiPoolDataProviderFactory(
+ await localBRE.ethers.provider.getSigner()
+ ).deploy();
+ await uiPoolDataProvider.deployTransaction.wait();
+ console.log('uiPoolDataProvider.address', uiPoolDataProvider.address);
+ await verifyContract(eContractid.UiPoolDataProvider, uiPoolDataProvider.address, []);
+
+ console.log(`\tFinished UiPoolDataProvider proxy and implementation deployment`);
+ });
diff --git a/tasks/dev/1_mock_tokens.ts b/tasks/dev/1_mock_tokens.ts
index efa3ca04..550135f5 100644
--- a/tasks/dev/1_mock_tokens.ts
+++ b/tasks/dev/1_mock_tokens.ts
@@ -1,8 +1,9 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {deployAllMockTokens} from '../../helpers/contracts-deployments';
+
task('dev:deploy-mock-tokens', 'Deploy mock tokens for dev enviroment')
- .addOptionalParam('verify', 'Verify contracts at Etherscan')
+ .addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
await deployAllMockTokens(verify);
});
diff --git a/tasks/dev/2_address_provider_registry.ts b/tasks/dev/2_address_provider_registry.ts
index 1c3da96d..c386b8cf 100644
--- a/tasks/dev/2_address_provider_registry.ts
+++ b/tasks/dev/2_address_provider_registry.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {
deployLendingPoolAddressesProvider,
deployLendingPoolAddressesProviderRegistry,
@@ -9,14 +9,14 @@ task(
'dev:deploy-address-provider',
'Deploy address provider, registry and fee provider for dev enviroment'
)
- .addOptionalParam('verify', 'Verify contracts at Etherscan')
+ .addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const admin = await (await localBRE.ethers.getSigners())[0].getAddress();
const addressesProvider = await deployLendingPoolAddressesProvider(verify);
- await waitForTx(await addressesProvider.setAaveAdmin(admin));
+ await waitForTx(await addressesProvider.setPoolAdmin(admin));
const addressesProviderRegistry = await deployLendingPoolAddressesProviderRegistry(verify);
await waitForTx(
diff --git a/tasks/dev/3_lending_pool.ts b/tasks/dev/3_lending_pool.ts
index 866bd6b7..b1aeb58c 100644
--- a/tasks/dev/3_lending_pool.ts
+++ b/tasks/dev/3_lending_pool.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {
deployATokensAndRatesHelper,
deployLendingPool,
@@ -15,9 +15,9 @@ import {
import {insertContractAddressInDb} from '../../helpers/contracts-helpers';
task('dev:deploy-lending-pool', 'Deploy lending pool for dev enviroment')
- .addOptionalParam('verify', 'Verify contracts at Etherscan')
+ .addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const addressesProvider = await getLendingPoolAddressesProvider();
diff --git a/tasks/dev/4_oracles.ts b/tasks/dev/4_oracles.ts
index a20e2381..c315491d 100644
--- a/tasks/dev/4_oracles.ts
+++ b/tasks/dev/4_oracles.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {
deployPriceOracle,
deployChainlinkProxyPriceProvider,
@@ -13,7 +13,7 @@ import {
import {ICommonConfiguration, iAssetBase, TokenContractId} from '../../helpers/types';
import {waitForTx} from '../../helpers/misc-utils';
import {getAllAggregatorsAddresses, getAllTokenAddresses} from '../../helpers/mock-helpers';
-import {ConfigNames, loadPoolConfig} from '../../helpers/configuration';
+import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration';
import {
getAllMockedTokens,
getLendingPoolAddressesProvider,
@@ -21,10 +21,10 @@ import {
} from '../../helpers/contracts-getters';
task('dev:deploy-oracles', 'Deploy oracles for dev enviroment')
- .addOptionalParam('verify', 'Verify contracts at Etherscan')
+ .addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const poolConfig = loadPoolConfig(pool);
const {
Mocks: {ChainlinkAggregatorPrices, AllAssetsInitialPrices},
@@ -42,7 +42,7 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment')
return prev;
}, defaultTokenList);
const addressesProvider = await getLendingPoolAddressesProvider();
- const admin = await addressesProvider.getAaveAdmin();
+ const admin = await addressesProvider.getPoolAdmin();
const fallbackOracle = await deployPriceOracle(verify);
await waitForTx(await fallbackOracle.setEthUsdPrice(MockUsdPriceInWei));
@@ -58,7 +58,10 @@ task('dev:deploy-oracles', 'Deploy oracles for dev enviroment')
allAggregatorsAddresses
);
- await deployChainlinkProxyPriceProvider([tokens, aggregators, fallbackOracle.address], verify);
+ await deployChainlinkProxyPriceProvider(
+ [tokens, aggregators, fallbackOracle.address, await getWethAddress(poolConfig)],
+ verify
+ );
await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));
const lendingRateOracle = await deployLendingRateOracle(verify);
diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts
index d4ce0c5d..11d25729 100644
--- a/tasks/dev/5_initialize.ts
+++ b/tasks/dev/5_initialize.ts
@@ -1,11 +1,17 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {
deployLendingPoolCollateralManager,
deployMockFlashLoanReceiver,
deployWalletBalancerProvider,
- deployAaveProtocolTestHelpers,
+ deployAaveProtocolDataProvider,
+ deployWETHGateway,
} from '../../helpers/contracts-deployments';
-import {getReservesConfigByPool} from '../../helpers/configuration';
+import {
+ ConfigNames,
+ getReservesConfigByPool,
+ getWethAddress,
+ loadPoolConfig,
+} from '../../helpers/configuration';
import {tEthereumAddress, AavePools, eContractid} from '../../helpers/types';
import {waitForTx, filterMapBy} from '../../helpers/misc-utils';
@@ -16,35 +22,30 @@ import {
} from '../../helpers/init-helpers';
import {getAllTokenAddresses} from '../../helpers/mock-helpers';
import {ZERO_ADDRESS} from '../../helpers/constants';
-import {
- getAllMockedTokens,
- getLendingPool,
- getLendingPoolConfiguratorProxy,
- getLendingPoolAddressesProvider,
-} from '../../helpers/contracts-getters';
+import {getAllMockedTokens, getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
import {insertContractAddressInDb} from '../../helpers/contracts-helpers';
task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
- .addOptionalParam('verify', 'Verify contracts at Etherscan')
- .setAction(async ({verify}, localBRE) => {
- await localBRE.run('set-bre');
+ .addFlag('verify', 'Verify contracts at Etherscan')
+ .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
+ .setAction(async ({verify, pool}, localBRE) => {
+ await localBRE.run('set-DRE');
+ const poolConfig = loadPoolConfig(pool);
const mockTokens = await getAllMockedTokens();
- const lendingPoolProxy = await getLendingPool();
- const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy();
const allTokenAddresses = getAllTokenAddresses(mockTokens);
const addressesProvider = await getLendingPoolAddressesProvider();
const protoPoolReservesAddresses = <{[symbol: string]: tEthereumAddress}>(
- filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI'))
+ filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI_'))
);
- const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify);
+ const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify);
const reservesParams = getReservesConfigByPool(AavePools.proto);
- const admin = await addressesProvider.getAaveAdmin();
+ const admin = await addressesProvider.getPoolAdmin();
await initReservesByHelper(reservesParams, protoPoolReservesAddresses, admin, ZERO_ADDRESS);
await enableReservesToBorrowByHelper(
@@ -76,5 +77,9 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
await deployWalletBalancerProvider(addressesProvider.address, verify);
- await insertContractAddressInDb(eContractid.AaveProtocolTestHelpers, testHelpers.address);
+ await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
+
+ const lendingPoolAddress = await addressesProvider.getLendingPool();
+ const wethAddress = await getWethAddress(poolConfig);
+ await deployWETHGateway([wethAddress, lendingPoolAddress]);
});
diff --git a/tasks/dev/6_wallet_balance_provider.ts b/tasks/dev/6_wallet_balance_provider.ts
new file mode 100644
index 00000000..be7f6419
--- /dev/null
+++ b/tasks/dev/6_wallet_balance_provider.ts
@@ -0,0 +1,13 @@
+import {task} from 'hardhat/config';
+import {deployWalletBalancerProvider} from '../../helpers/contracts-deployments';
+
+import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
+
+task('dev:wallet-balance-provider', 'Initialize lending pool configuration.')
+ .addFlag('verify', 'Verify contracts at Etherscan')
+ .setAction(async ({verify}, localBRE) => {
+ await localBRE.run('set-DRE');
+
+ const addressesProvider = await getLendingPoolAddressesProvider();
+ await deployWalletBalancerProvider(addressesProvider.address, verify);
+ });
diff --git a/tasks/full/1_address_provider_registry.ts b/tasks/full/1_address_provider_registry.ts
index 4dd84f08..5af922d4 100644
--- a/tasks/full/1_address_provider_registry.ts
+++ b/tasks/full/1_address_provider_registry.ts
@@ -1,11 +1,16 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {getParamPerNetwork} from '../../helpers/contracts-helpers';
import {
deployLendingPoolAddressesProvider,
deployLendingPoolAddressesProviderRegistry,
} from '../../helpers/contracts-deployments';
import {waitForTx} from '../../helpers/misc-utils';
-import {ConfigNames, loadPoolConfig, getGenesisAaveAdmin} from '../../helpers/configuration';
+import {
+ ConfigNames,
+ loadPoolConfig,
+ getGenesisPoolAdmin,
+ getEmergencyAdmin,
+} from '../../helpers/configuration';
import {eEthereumNetwork} from '../../helpers/types';
import {getLendingPoolAddressesProviderRegistry} from '../../helpers/contracts-getters';
@@ -16,7 +21,7 @@ task(
.addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const network = localBRE.network.name;
const poolConfig = loadPoolConfig(pool);
const {ProviderId} = poolConfig;
@@ -24,7 +29,11 @@ task(
const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network);
// Deploy address provider and set genesis manager
const addressesProvider = await deployLendingPoolAddressesProvider(verify);
- await waitForTx(await addressesProvider.setAaveAdmin(await getGenesisAaveAdmin(poolConfig)));
+ await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig)));
+ const admin = await getEmergencyAdmin(poolConfig);
+ console.log('Admin is ', admin);
+
+ await waitForTx(await addressesProvider.setEmergencyAdmin(admin));
// If no provider registry is set, deploy lending pool address provider registry and register the address provider
const addressesProviderRegistry = !providerRegistryAddress
@@ -44,4 +53,11 @@ task(
if (proxyProvider && proxyProvider !== '') {
await waitForTx(await addressesProvider.setPriceOracle(proxyProvider));
}
+
+ //register the lending rate oracle
+ const lendingRateOracle = getParamPerNetwork(poolConfig.LendingRateOracle, network);
+
+ if (lendingRateOracle && lendingRateOracle !== '') {
+ await waitForTx(await addressesProvider.setLendingRateOracle(lendingRateOracle));
+ }
});
diff --git a/tasks/full/2_lending_pool.ts b/tasks/full/2_lending_pool.ts
index 4a10b30c..b8b57344 100644
--- a/tasks/full/2_lending_pool.ts
+++ b/tasks/full/2_lending_pool.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {insertContractAddressInDb} from '../../helpers/contracts-helpers';
import {
deployATokensAndRatesHelper,
@@ -17,7 +17,7 @@ import {
task('full:deploy-lending-pool', 'Deploy lending pool for dev enviroment')
.addFlag('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const addressesProvider = await getLendingPoolAddressesProvider();
diff --git a/tasks/full/3_oracles.ts b/tasks/full/3_oracles.ts
index a7a39a8c..48782dba 100644
--- a/tasks/full/3_oracles.ts
+++ b/tasks/full/3_oracles.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {getParamPerNetwork} from '../../helpers/contracts-helpers';
import {
deployChainlinkProxyPriceProvider,
@@ -7,7 +7,7 @@ import {
import {setInitialMarketRatesInRatesOracleByHelper} from '../../helpers/oracles-helpers';
import {ICommonConfiguration, eEthereumNetwork, SymbolMap} from '../../helpers/types';
import {waitForTx, filterMapBy} from '../../helpers/misc-utils';
-import {ConfigNames, loadPoolConfig} from '../../helpers/configuration';
+import {ConfigNames, loadPoolConfig, getWethAddress} from '../../helpers/configuration';
import {exit} from 'process';
import {
getLendingPoolAddressesProvider,
@@ -19,22 +19,21 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => {
try {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const network = localBRE.network.name;
const poolConfig = loadPoolConfig(pool);
const {
ProtocolGlobalParams: {UsdAddress},
LendingRateOracleRatesCommon,
ReserveAssets,
- ReserveSymbols,
FallbackOracle,
ChainlinkAggregator,
} = poolConfig as ICommonConfiguration;
const lendingRateOracles = filterMapBy(LendingRateOracleRatesCommon, (key) =>
- ReserveSymbols.includes(key)
+ Object.keys(ReserveAssets[network]).includes(key)
);
const addressesProvider = await getLendingPoolAddressesProvider();
- const admin = await addressesProvider.getAaveAdmin();
+ const admin = await addressesProvider.getPoolAdmin();
const fallbackOracle = await getParamPerNetwork(FallbackOracle, network);
const reserveAssets = await getParamPerNetwork(ReserveAssets, network);
@@ -47,7 +46,7 @@ task('full:deploy-oracles', 'Deploy oracles for dev enviroment')
const [tokens, aggregators] = getPairsTokenAggregator(tokensToWatch, chainlinkAggregators);
const chainlinkProviderPriceProvider = await deployChainlinkProxyPriceProvider(
- [tokens, aggregators, fallbackOracle],
+ [tokens, aggregators, fallbackOracle, await getWethAddress(poolConfig)],
verify
);
await waitForTx(
diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts
index ddc789d1..99b55f15 100644
--- a/tasks/full/5_initialize.ts
+++ b/tasks/full/5_initialize.ts
@@ -1,11 +1,12 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {getParamPerNetwork} from '../../helpers/contracts-helpers';
import {
deployLendingPoolCollateralManager,
deployWalletBalancerProvider,
- deployAaveProtocolTestHelpers,
+ deployAaveProtocolDataProvider,
+ deployWETHGateway,
} from '../../helpers/contracts-deployments';
-import {loadPoolConfig, ConfigNames} from '../../helpers/configuration';
+import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration';
import {eEthereumNetwork, ICommonConfiguration} from '../../helpers/types';
import {waitForTx} from '../../helpers/misc-utils';
import {
@@ -14,11 +15,7 @@ import {
enableReservesAsCollateralByHelper,
} from '../../helpers/init-helpers';
import {exit} from 'process';
-import {
- getLendingPool,
- getLendingPoolConfiguratorProxy,
- getLendingPoolAddressesProvider,
-} from '../../helpers/contracts-getters';
+import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
import {ZERO_ADDRESS} from '../../helpers/constants';
task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
@@ -26,20 +23,18 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
.setAction(async ({verify, pool}, localBRE) => {
try {
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
const network = localBRE.network.name;
const poolConfig = loadPoolConfig(pool);
const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration;
const reserveAssets = await getParamPerNetwork(ReserveAssets, network);
- const lendingPoolProxy = await getLendingPool();
- const lendingPoolConfiguratorProxy = await getLendingPoolConfiguratorProxy();
const addressesProvider = await getLendingPoolAddressesProvider();
- const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address, verify);
+ const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify);
- const admin = await addressesProvider.getAaveAdmin();
+ const admin = await addressesProvider.getPoolAdmin();
if (!reserveAssets) {
throw 'Reserve assets is undefined. Check ReserveAssets configuration at config directory';
}
@@ -54,6 +49,11 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
);
await deployWalletBalancerProvider(addressesProvider.address, verify);
+
+ const wethAddress = await getWethAddress(poolConfig);
+ const lendingPoolAddress = await addressesProvider.getLendingPool();
+
+ await deployWETHGateway([wethAddress, lendingPoolAddress]);
} catch (err) {
console.error(err);
exit(1);
diff --git a/tasks/full/7_data-provider.ts b/tasks/full/7_data-provider.ts
new file mode 100644
index 00000000..4f0954a5
--- /dev/null
+++ b/tasks/full/7_data-provider.ts
@@ -0,0 +1,19 @@
+import {task} from 'hardhat/config';
+import {deployAaveProtocolDataProvider} from '../../helpers/contracts-deployments';
+import {exit} from 'process';
+import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
+
+task('full:data-provider', 'Initialize lending pool configuration.')
+ .addFlag('verify', 'Verify contracts at Etherscan')
+ .setAction(async ({verify}, localBRE) => {
+ try {
+ await localBRE.run('set-DRE');
+
+ const addressesProvider = await getLendingPoolAddressesProvider();
+
+ await deployAaveProtocolDataProvider(addressesProvider.address, verify);
+ } catch (err) {
+ console.error(err);
+ exit(1);
+ }
+ });
diff --git a/tasks/migrations/aave.dev.ts b/tasks/migrations/aave.dev.ts
index 03bacb94..1892cb53 100644
--- a/tasks/migrations/aave.dev.ts
+++ b/tasks/migrations/aave.dev.ts
@@ -1,13 +1,14 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {checkVerification} from '../../helpers/etherscan-verification';
import {ConfigNames} from '../../helpers/configuration';
+import {printContracts} from '../../helpers/misc-utils';
task('aave:dev', 'Deploy development enviroment')
.addOptionalParam('verify', 'Verify contracts at Etherscan')
.setAction(async ({verify}, localBRE) => {
const POOL_NAME = ConfigNames.Aave;
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
// Prevent loss of gas verifying all the needed ENVs for Etherscan verification
if (verify) {
@@ -29,7 +30,8 @@ task('aave:dev', 'Deploy development enviroment')
await localBRE.run('dev:deploy-oracles', {verify, pool: POOL_NAME});
console.log('5. Initialize lending pool');
- await localBRE.run('dev:initialize-lending-pool', {verify});
+ await localBRE.run('dev:initialize-lending-pool', {verify, pool: POOL_NAME});
console.log('\nFinished migration');
+ printContracts();
});
diff --git a/tasks/migrations/aave.full.ts b/tasks/migrations/aave.full.ts
index fb119103..203c01f8 100644
--- a/tasks/migrations/aave.full.ts
+++ b/tasks/migrations/aave.full.ts
@@ -1,7 +1,8 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {checkVerification} from '../../helpers/etherscan-verification';
import {ConfigNames} from '../../helpers/configuration';
import {EthereumNetworkNames} from '../../helpers/types';
+import {printContracts} from '../../helpers/misc-utils';
task('aave:full', 'Deploy development enviroment')
.addFlag('verify', 'Verify contracts at Etherscan')
@@ -9,7 +10,7 @@ task('aave:full', 'Deploy development enviroment')
const POOL_NAME = ConfigNames.Aave;
const network = localBRE.network.name;
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
// Prevent loss of gas verifying all the needed ENVs for Etherscan verification
if (verify) {
@@ -19,13 +20,22 @@ task('aave:full', 'Deploy development enviroment')
console.log('Migration started\n');
console.log('1. Deploy address provider');
- await localBRE.run('full:deploy-address-provider', {verify, pool: POOL_NAME});
+ await localBRE.run('full:deploy-address-provider', {pool: POOL_NAME});
console.log('2. Deploy lending pool');
- await localBRE.run('full:deploy-lending-pool', {verify});
+ await localBRE.run('full:deploy-lending-pool');
console.log('3. Initialize lending pool');
- await localBRE.run('full:initialize-lending-pool', {verify, pool: POOL_NAME});
+ await localBRE.run('full:initialize-lending-pool', {pool: POOL_NAME});
+ if (verify) {
+ printContracts();
+ console.log('4. Veryfing contracts');
+ await localBRE.run('verify:general', {all: true, pool: POOL_NAME});
+
+ console.log('5. Veryfing aTokens and debtTokens');
+ await localBRE.run('verify:tokens', {pool: POOL_NAME});
+ }
console.log('\nFinished migrations');
+ printContracts();
});
diff --git a/tasks/migrations/uniswap.dev.ts b/tasks/migrations/uniswap.dev.ts
index e6c5b3e8..70a31f49 100644
--- a/tasks/migrations/uniswap.dev.ts
+++ b/tasks/migrations/uniswap.dev.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {checkVerification} from '../../helpers/etherscan-verification';
import {ConfigNames} from '../../helpers/configuration';
@@ -7,7 +7,7 @@ task('uniswap:dev', 'Deploy development enviroment')
.setAction(async ({verify}, localBRE) => {
const POOL_NAME = ConfigNames.Uniswap;
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
// Prevent loss of gas verifying all the needed ENVs for Etherscan verification
if (verify) {
@@ -29,7 +29,7 @@ task('uniswap:dev', 'Deploy development enviroment')
await localBRE.run('dev:deploy-oracles', {verify, pool: POOL_NAME});
console.log('5. Initialize lending pool');
- await localBRE.run('dev:initialize-lending-pool', {verify});
+ await localBRE.run('dev:initialize-lending-pool', {verify, pool: POOL_NAME});
console.log('\nFinished migration');
});
diff --git a/tasks/migrations/uniswap.full.ts b/tasks/migrations/uniswap.full.ts
index fef440b1..bca82466 100644
--- a/tasks/migrations/uniswap.full.ts
+++ b/tasks/migrations/uniswap.full.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {checkVerification} from '../../helpers/etherscan-verification';
import {ConfigNames} from '../../helpers/configuration';
@@ -7,7 +7,7 @@ task('uniswap:full', 'Deploy development enviroment')
.setAction(async ({verify}, localBRE) => {
const POOL_NAME = ConfigNames.Uniswap;
- await localBRE.run('set-bre');
+ await localBRE.run('set-DRE');
// Prevent loss of gas verifying all the needed ENVs for Etherscan verification
if (verify) {
diff --git a/tasks/misc/print-contracts.ts b/tasks/misc/print-contracts.ts
new file mode 100644
index 00000000..d3caf0cc
--- /dev/null
+++ b/tasks/misc/print-contracts.ts
@@ -0,0 +1,9 @@
+import {task} from 'hardhat/config';
+import {printContracts} from '../../helpers/misc-utils';
+
+task('print-contracts', 'Inits the DRE, to have access to all the plugins').setAction(
+ async ({}, localBRE) => {
+ await localBRE.run('set-DRE');
+ printContracts();
+ }
+);
diff --git a/tasks/misc/set-bre.ts b/tasks/misc/set-bre.ts
index 609ac6b6..a1cb29c5 100644
--- a/tasks/misc/set-bre.ts
+++ b/tasks/misc/set-bre.ts
@@ -1,9 +1,9 @@
-import {task} from '@nomiclabs/buidler/config';
-import {setBRE} from '../../helpers/misc-utils';
+import {task} from 'hardhat/config';
+import {setDRE} from '../../helpers/misc-utils';
-task(`set-bre`, `Inits the BRE, to have access to all the plugins' objects`).setAction(
- async (_, _BRE) => {
- setBRE(_BRE);
- return _BRE;
+task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction(
+ async (_, _DRE) => {
+ setDRE(_DRE);
+ return _DRE;
}
);
diff --git a/tasks/misc/verify-sc.ts b/tasks/misc/verify-sc.ts
index ee1ce0e2..81f0970c 100644
--- a/tasks/misc/verify-sc.ts
+++ b/tasks/misc/verify-sc.ts
@@ -1,4 +1,4 @@
-import {task} from '@nomiclabs/buidler/config';
+import {task} from 'hardhat/config';
import {verifyContract, checkVerification} from '../../helpers/etherscan-verification';
interface VerifyParams {
@@ -8,8 +8,7 @@ interface VerifyParams {
libraries: string;
}
-task('verify-sc', 'Inits the BRE, to have access to all the plugins')
- .addParam('contractName', 'Name of the Solidity smart contract')
+task('verify-sc', 'Inits the DRE, to have access to all the plugins')
.addParam('address', 'Ethereum address of the smart contract')
.addOptionalParam(
'libraries',
@@ -20,16 +19,11 @@ task('verify-sc', 'Inits the BRE, to have access to all the plugins')
'arguments for contract constructor',
[]
)
- .setAction(
- async (
- {contractName, address, constructorArguments = [], libraries}: VerifyParams,
- localBRE
- ) => {
- await localBRE.run('set-bre');
+ .setAction(async ({address, constructorArguments = [], libraries}: VerifyParams, localBRE) => {
+ await localBRE.run('set-DRE');
- checkVerification();
+ checkVerification();
- const result = await verifyContract(contractName, address, constructorArguments, libraries);
- return result;
- }
- );
+ const result = await verifyContract(address, constructorArguments, libraries);
+ return result;
+ });
diff --git a/tasks/verifications/1_general.ts b/tasks/verifications/1_general.ts
new file mode 100644
index 00000000..d5accba8
--- /dev/null
+++ b/tasks/verifications/1_general.ts
@@ -0,0 +1,175 @@
+import {zeroAddress} from 'ethereumjs-util';
+import {task} from 'hardhat/config';
+import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration';
+import {ZERO_ADDRESS} from '../../helpers/constants';
+import {
+ getAaveProtocolDataProvider,
+ getAddressById,
+ getLendingPool,
+ getLendingPoolAddressesProvider,
+ getLendingPoolAddressesProviderRegistry,
+ getLendingPoolCollateralManager,
+ getLendingPoolCollateralManagerImpl,
+ getLendingPoolConfiguratorImpl,
+ getLendingPoolConfiguratorProxy,
+ getLendingPoolImpl,
+ getWalletProvider,
+ getWETHGateway,
+} from '../../helpers/contracts-getters';
+import {getParamPerNetwork} from '../../helpers/contracts-helpers';
+import {verifyContract} from '../../helpers/etherscan-verification';
+import {eEthereumNetwork, ICommonConfiguration} from '../../helpers/types';
+
+task('verify:general', 'Deploy oracles for dev enviroment')
+ .addFlag('all', 'Verify all contracts at Etherscan')
+ .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
+ .setAction(async ({all, pool}, localDRE) => {
+ await localDRE.run('set-DRE');
+ const network = localDRE.network.name as eEthereumNetwork;
+ const poolConfig = loadPoolConfig(pool);
+ const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration;
+
+ const addressesProvider = await getLendingPoolAddressesProvider();
+ const addressesProviderRegistry = await getLendingPoolAddressesProviderRegistry();
+ const lendingPoolProxy = await getLendingPool();
+ const lendingPoolConfigurator = await getLendingPoolConfiguratorProxy();
+ const lendingPoolCollateralManager = await getLendingPoolCollateralManager();
+
+ if (all) {
+ const lendingPoolImpl = await getLendingPoolImpl();
+ const lendingPoolConfiguratorImpl = await getLendingPoolConfiguratorImpl();
+ const lendingPoolCollateralManagerImpl = await getLendingPoolCollateralManagerImpl();
+ const dataProvider = await getAaveProtocolDataProvider();
+ const walletProvider = await getWalletProvider();
+ const wethGateway = await getWETHGateway();
+
+ // Address Provider
+ console.log('\n- Verifying address provider...\n');
+ await verifyContract(addressesProvider.address, []);
+
+ // Address Provider Registry
+ console.log('\n- Verifying address provider registry...\n');
+ await verifyContract(addressesProviderRegistry.address, []);
+
+ // Lending Pool implementation
+ console.log('\n- Verifying LendingPool Implementation...\n');
+ await verifyContract(lendingPoolImpl.address, []);
+
+ // Lending Pool Configurator implementation
+ console.log('\n- Verifying LendingPool Configurator Implementation...\n');
+ await verifyContract(lendingPoolConfiguratorImpl.address, []);
+
+ // Lending Pool Collateral Manager implementation
+ console.log('\n- Verifying LendingPool Collateral Manager Implementation...\n');
+ await verifyContract(lendingPoolCollateralManagerImpl.address, []);
+
+ // Test helpers
+ console.log('\n- Verifying Aave Provider Helpers...\n');
+ await verifyContract(dataProvider.address, [addressesProvider.address]);
+
+ // Wallet balance provider
+ console.log('\n- Verifying Wallet Balance Provider...\n');
+ await verifyContract(walletProvider.address, [addressesProvider.address]);
+
+ // WETHGateway
+ console.log('\n- Verifying WETHGateway...\n');
+ await verifyContract(wethGateway.address, [
+ await getWethAddress(poolConfig),
+ lendingPoolProxy.address,
+ ]);
+ }
+ // Lending Pool proxy
+ console.log('\n- Verifying Lending Pool Proxy...\n');
+ await verifyContract(lendingPoolProxy.address, [addressesProvider.address]);
+
+ // LendingPool Conf proxy
+ console.log('\n- Verifying Lending Pool Configurator Proxy...\n');
+ await verifyContract(lendingPoolConfigurator.address, [addressesProvider.address]);
+
+ // Proxy collateral manager
+ console.log('\n- Verifying Lending Pool Collateral Manager Proxy...\n');
+ await verifyContract(lendingPoolCollateralManager.address, []);
+
+ // Tokens verification
+ const DAI = getParamPerNetwork(ReserveAssets, network).DAI;
+ const stableDebtDai = await getAddressById('stableDebtDAI');
+ const variableDebtDai = await getAddressById('variableDebtDAI');
+ const aDAI = await getAddressById('aDAI');
+ const {
+ stableDebtTokenAddress,
+ variableDebtTokenAddress,
+ aTokenAddress,
+ interestRateStrategyAddress,
+ } = await lendingPoolProxy.getReserveData(DAI);
+ const {
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ } = ReservesConfig.DAI;
+
+ // Proxy Stable Debt
+ console.log('\n- Verifying DAI Stable Debt Token proxy...\n');
+ await verifyContract(stableDebtTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Proxy Variable Debt
+ console.log('\n- Verifying DAI Variable Debt Token proxy...\n');
+ await verifyContract(variableDebtTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Proxy aToken
+ console.log('\n- Verifying aDAI Token proxy...\n');
+ await verifyContract(aTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Strategy Rate
+ console.log('\n- Verifying Strategy rate...\n');
+ await verifyContract(interestRateStrategyAddress, [
+ addressesProvider.address,
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ ]);
+
+ // aToken
+ console.log('\n- Verifying aToken...\n');
+ await verifyContract(aDAI, [
+ lendingPoolProxy.address,
+ DAI,
+ ZERO_ADDRESS,
+ 'Aave interest bearing DAI',
+ 'aDAI',
+ ZERO_ADDRESS,
+ ]);
+ // stableDebtToken
+ console.log('\n- Verifying StableDebtToken...\n');
+ await verifyContract(stableDebtDai, [
+ lendingPoolProxy.address,
+ DAI,
+ 'Aave stable debt bearing DAI',
+ 'stableDebtDAI',
+ ZERO_ADDRESS,
+ ]);
+ // variableDebtToken
+ console.log('\n- Verifying VariableDebtToken...\n');
+ await verifyContract(variableDebtDai, [
+ lendingPoolProxy.address,
+ DAI,
+ 'Aave variable debt bearing DAI',
+ 'variableDebtDAI',
+ ZERO_ADDRESS,
+ ]);
+ // DelegatedAwareAToken
+ console.log('\n- Verifying DelegatedAwareAToken...\n');
+ const UNI = getParamPerNetwork(ReserveAssets, network).UNI;
+ const aUNI = await getAddressById('aUNI');
+ await verifyContract(aUNI, [
+ lendingPoolProxy.address,
+ UNI,
+ ZERO_ADDRESS,
+ 'Aave interest bearing UNI',
+ 'aUNI',
+ ZERO_ADDRESS,
+ ]);
+ });
diff --git a/tasks/verifications/2_tokens.ts b/tasks/verifications/2_tokens.ts
new file mode 100644
index 00000000..032135ad
--- /dev/null
+++ b/tasks/verifications/2_tokens.ts
@@ -0,0 +1,109 @@
+import {task} from 'hardhat/config';
+import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration';
+import {ZERO_ADDRESS} from '../../helpers/constants';
+import {
+ getAddressById,
+ getLendingPool,
+ getLendingPoolAddressesProvider,
+ getLendingPoolConfiguratorProxy,
+} from '../../helpers/contracts-getters';
+import {getParamPerNetwork} from '../../helpers/contracts-helpers';
+import {verifyContract} from '../../helpers/etherscan-verification';
+import {eEthereumNetwork, ICommonConfiguration, IReserveParams} from '../../helpers/types';
+
+task('verify:tokens', 'Deploy oracles for dev enviroment')
+ .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
+ .setAction(async ({verify, all, pool}, localDRE) => {
+ await localDRE.run('set-DRE');
+ const network = localDRE.network.name as eEthereumNetwork;
+ const poolConfig = loadPoolConfig(pool);
+ const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration;
+
+ const addressesProvider = await getLendingPoolAddressesProvider();
+ const lendingPoolProxy = await getLendingPool();
+ const lendingPoolConfigurator = await getLendingPoolConfiguratorProxy();
+
+ const configs = Object.entries(ReservesConfig) as [string, IReserveParams][];
+ for (const entry of Object.entries(getParamPerNetwork(ReserveAssets, network))) {
+ const [token, tokenAddress] = entry;
+ console.log(`- Verifying ${token} token related contracts`);
+ const {
+ stableDebtTokenAddress,
+ variableDebtTokenAddress,
+ aTokenAddress,
+ interestRateStrategyAddress,
+ } = await lendingPoolProxy.getReserveData(tokenAddress);
+
+ const tokenConfig = configs.find(([symbol]) => symbol === token);
+ if (!tokenConfig) {
+ throw `ReservesConfig not found for ${token} token`;
+ }
+
+ const {
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ } = tokenConfig[1];
+
+ console.log;
+ // Proxy Stable Debt
+ console.log(`\n- Verifying Stable Debt Token proxy...\n`);
+ await verifyContract(stableDebtTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Proxy Variable Debt
+ console.log(`\n- Verifying Debt Token proxy...\n`);
+ await verifyContract(variableDebtTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Proxy aToken
+ console.log('\n- Verifying aToken proxy...\n');
+ await verifyContract(aTokenAddress, [lendingPoolConfigurator.address]);
+
+ // Strategy Rate
+ console.log(`\n- Verifying Strategy rate...\n`);
+ await verifyContract(interestRateStrategyAddress, [
+ addressesProvider.address,
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ ]);
+
+ const stableDebt = await getAddressById(`stableDebt${token}`);
+ const variableDebt = await getAddressById(`variableDebt${token}`);
+ const aToken = await getAddressById(`a${token}`);
+
+ // aToken
+ console.log('\n- Verifying aToken...\n');
+ await verifyContract(aToken, [
+ lendingPoolProxy.address,
+ tokenAddress,
+ ZERO_ADDRESS,
+ `Aave interest bearing ${token}`,
+ `a${token}`,
+ ZERO_ADDRESS,
+ ]);
+
+ // stableDebtToken
+ console.log('\n- Verifying StableDebtToken...\n');
+ await verifyContract(stableDebt, [
+ lendingPoolProxy.address,
+ tokenAddress,
+ `Aave stable debt bearing ${token}`,
+ `stableDebt${token}`,
+ ZERO_ADDRESS,
+ ]);
+
+ // variableDebtToken
+ console.log('\n- Verifying VariableDebtToken...\n');
+ await verifyContract(variableDebt, [
+ lendingPoolProxy.address,
+ tokenAddress,
+ `Aave variable debt bearing ${token}`,
+ `variableDebt${token}`,
+ ZERO_ADDRESS,
+ ]);
+ }
+ });
diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts
index 4e6f24f8..559a8d08 100644
--- a/test/__setup.spec.ts
+++ b/test/__setup.spec.ts
@@ -1,4 +1,4 @@
-import rawBRE from '@nomiclabs/buidler';
+import rawBRE from 'hardhat';
import {MockContract} from 'ethereum-waffle';
import {
insertContractAddressInDb,
@@ -16,15 +16,17 @@ import {
deployLendingPoolCollateralManager,
deployMockFlashLoanReceiver,
deployWalletBalancerProvider,
- deployAaveProtocolTestHelpers,
+ deployAaveProtocolDataProvider,
deployLendingRateOracle,
deployStableAndVariableTokensHelper,
deployATokensAndRatesHelper,
+ deployWETHGateway,
+ deployWETHMocked,
} from '../helpers/contracts-deployments';
import {Signer} from 'ethers';
import {TokenContractId, eContractid, tEthereumAddress, AavePools} from '../helpers/types';
import {MintableErc20 as MintableERC20} from '../types/MintableErc20';
-import {getReservesConfigByPool} from '../helpers/configuration';
+import {getEmergencyAdmin, getReservesConfigByPool} from '../helpers/configuration';
import {initializeMakeSuite} from './helpers/make-suite';
import {
@@ -32,7 +34,7 @@ import {
deployAllMockAggregators,
setInitialMarketRatesInRatesOracleByHelper,
} from '../helpers/oracles-helpers';
-import {waitForTx} from '../helpers/misc-utils';
+import {DRE, waitForTx} from '../helpers/misc-utils';
import {
initReservesByHelper,
enableReservesToBorrowByHelper,
@@ -45,6 +47,7 @@ import {
getLendingPoolConfiguratorProxy,
getPairsTokenAggregator,
} from '../helpers/contracts-getters';
+import {Weth9Mocked} from '../types/Weth9Mocked';
const MOCK_USD_PRICE_IN_WEI = AaveConfig.ProtocolGlobalParams.MockUsdPriceInWei;
const ALL_ASSETS_INITIAL_PRICES = AaveConfig.Mocks.AllAssetsInitialPrices;
@@ -53,12 +56,17 @@ const MOCK_CHAINLINK_AGGREGATORS_PRICES = AaveConfig.Mocks.ChainlinkAggregatorPr
const LENDING_RATE_ORACLE_RATES_COMMON = AaveConfig.LendingRateOracleRatesCommon;
const deployAllMockTokens = async (deployer: Signer) => {
- const tokens: {[symbol: string]: MockContract | MintableERC20} = {};
+ const tokens: {[symbol: string]: MockContract | MintableERC20 | Weth9Mocked} = {};
const protoConfigData = getReservesConfigByPool(AavePools.proto);
const secondaryConfigData = getReservesConfigByPool(AavePools.secondary);
for (const tokenSymbol of Object.keys(TokenContractId)) {
+ if (tokenSymbol === 'WETH') {
+ tokens[tokenSymbol] = await deployWETHMocked();
+ await registerContractInJsonDb(tokenSymbol.toUpperCase(), tokens[tokenSymbol]);
+ continue;
+ }
let decimals = 18;
let configData = (protoConfigData)[tokenSymbol];
@@ -87,9 +95,20 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
const aaveAdmin = await deployer.getAddress();
const mockTokens = await deployAllMockTokens(deployer);
+ const mockTokenAddress = Object.keys(mockTokens).reduce<{[key: string]: string}>((acc, key) => {
+ acc[key] = mockTokens[key].address;
+ return acc;
+ }, {});
const addressesProvider = await deployLendingPoolAddressesProvider();
- await waitForTx(await addressesProvider.setAaveAdmin(aaveAdmin));
+ await waitForTx(await addressesProvider.setPoolAdmin(aaveAdmin));
+
+ //setting users[1] as emergency admin, which is in position 2 in the DRE addresses list
+ const addressList = await Promise.all(
+ (await DRE.ethers.getSigners()).map((signer) => signer.getAddress())
+ );
+
+ await waitForTx(await addressesProvider.setEmergencyAdmin(addressList[2]));
const addressesProviderRegistry = await deployLendingPoolAddressesProviderRegistry();
await waitForTx(
@@ -100,8 +119,8 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
await waitForTx(await addressesProvider.setLendingPoolImpl(lendingPoolImpl.address));
- const address = await addressesProvider.getLendingPool();
- const lendingPoolProxy = await getLendingPool(address);
+ const lendingPoolAddress = await addressesProvider.getLendingPool();
+ const lendingPoolProxy = await getLendingPool(lendingPoolAddress);
await insertContractAddressInDb(eContractid.LendingPool, lendingPoolProxy.address);
@@ -136,7 +155,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
USDC: mockTokens.USDC.address,
USDT: mockTokens.USDT.address,
SUSD: mockTokens.SUSD.address,
- LEND: mockTokens.LEND.address,
+ AAVE: mockTokens.AAVE.address,
BAT: mockTokens.BAT.address,
REP: mockTokens.REP.address,
MKR: mockTokens.MKR.address,
@@ -147,7 +166,10 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
ZRX: mockTokens.ZRX.address,
SNX: mockTokens.SNX.address,
BUSD: mockTokens.BUSD.address,
-
+ YFI: mockTokens.BUSD.address,
+ REN: mockTokens.REN.address,
+ UNI: mockTokens.UNI.address,
+ ENJ: mockTokens.ENJ.address,
USD: USD_ADDRESS,
UNI_DAI_ETH: mockTokens.UNI_DAI_ETH.address,
@@ -183,6 +205,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
tokens,
aggregators,
fallbackOracle.address,
+ mockTokens.WETH.address,
]);
await waitForTx(await addressesProvider.setPriceOracle(fallbackOracle.address));
@@ -212,9 +235,9 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
const reservesParams = getReservesConfigByPool(AavePools.proto);
- const testHelpers = await deployAaveProtocolTestHelpers(addressesProvider.address);
+ const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address);
- await insertContractAddressInDb(eContractid.AaveProtocolTestHelpers, testHelpers.address);
+ await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
const admin = await deployer.getAddress();
console.log('Initialize configuration');
@@ -242,11 +265,13 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
await deployWalletBalancerProvider(addressesProvider.address);
+ await deployWETHGateway([mockTokens.WETH.address, lendingPoolAddress]);
+
console.timeEnd('setup');
};
before(async () => {
- await rawBRE.run('set-bre');
+ await rawBRE.run('set-DRE');
const [deployer, secondaryWallet] = await getEthersSigners();
console.log('-> Deploying test environment...');
await buildTestEnv(deployer, secondaryWallet);
diff --git a/test/atoken-permit.spec.ts b/test/atoken-permit.spec.ts
index 44c90008..28c980e1 100644
--- a/test/atoken-permit.spec.ts
+++ b/test/atoken-permit.spec.ts
@@ -5,7 +5,7 @@ import {expect} from 'chai';
import {ethers} from 'ethers';
import {eEthereumNetwork} from '../helpers/types';
import {makeSuite, TestEnv} from './helpers/make-suite';
-import {BRE} from '../helpers/misc-utils';
+import {DRE} from '../helpers/misc-utils';
import {
ConfigNames,
getATokenDomainSeparatorPerNetwork,
@@ -20,7 +20,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
it('Checks the domain separator', async () => {
const DOMAIN_SEPARATOR_ENCODED = getATokenDomainSeparatorPerNetwork(
- eEthereumNetwork.buidlerevm,
+ eEthereumNetwork.hardhat,
poolConfig
);
@@ -47,7 +47,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const tokenName = await aDai.name();
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const expiration = 0;
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = ethers.utils.parseEther('2').toString();
@@ -92,7 +92,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const deadline = MAX_UINT_AMOUNT;
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = parseEther('2').toString();
@@ -134,7 +134,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const deadline = MAX_UINT_AMOUNT;
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = '0';
@@ -180,7 +180,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const deadline = MAX_UINT_AMOUNT;
const nonce = 1000;
const permitAmount = '0';
@@ -215,7 +215,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const expiration = '1';
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = '0';
@@ -250,7 +250,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const deadline = MAX_UINT_AMOUNT;
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = '0';
@@ -285,7 +285,7 @@ makeSuite('AToken: Permit', (testEnv: TestEnv) => {
const owner = deployer;
const spender = users[1];
- const chainId = BRE.network.config.chainId || BUIDLEREVM_CHAINID;
+ const chainId = DRE.network.config.chainId || BUIDLEREVM_CHAINID;
const expiration = MAX_UINT_AMOUNT;
const nonce = (await aDai._nonces(owner.address)).toNumber();
const permitAmount = '0';
diff --git a/test/configurator.spec.ts b/test/configurator.spec.ts
index 315dc26e..79af55c5 100644
--- a/test/configurator.spec.ts
+++ b/test/configurator.spec.ts
@@ -11,7 +11,7 @@ const {expect} = require('chai');
makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {
- LPC_CALLER_NOT_AAVE_ADMIN,
+ CALLER_NOT_POOL_ADMIN,
LPC_RESERVE_LIQUIDITY_NOT_0,
RC_INVALID_LTV,
RC_INVALID_LIQ_THRESHOLD,
@@ -48,16 +48,6 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
).to.be.revertedWith(RC_INVALID_LIQ_BONUS);
});
- it('Reverts trying to set an invalid reserve decimals', async () => {
- const {configurator, weth} = testEnv;
-
- const invalidDecimals = 256;
-
- await expect(configurator.setReserveDecimals(weth.address, invalidDecimals)).to.be.revertedWith(
- RC_INVALID_DECIMALS
- );
- });
-
it('Reverts trying to set an invalid reserve factor', async () => {
const {configurator, weth} = testEnv;
@@ -87,16 +77,16 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).deactivateReserve(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Check the onlyAaveAdmin on activateReserve ', async () => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).activateReserve(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Freezes the ETH reserve', async () => {
@@ -156,16 +146,16 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).freezeReserve(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Check the onlyAaveAdmin on unfreezeReserve ', async () => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).unfreezeReserve(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Deactivates the ETH reserve for borrowing', async () => {
@@ -228,16 +218,16 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).disableBorrowingOnReserve(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Check the onlyAaveAdmin on enableBorrowingOnReserve ', async () => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).enableBorrowingOnReserve(weth.address, true),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Deactivates the ETH reserve as collateral', async () => {
@@ -300,8 +290,8 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
configurator
.connect(users[2].signer)
.configureReserveAsCollateral(weth.address, '7500', '8000', '10500'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Disable stable borrow rate on the ETH reserve', async () => {
@@ -360,16 +350,16 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).disableReserveStableRate(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Check the onlyAaveAdmin on enableReserveStableRate', async () => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).enableReserveStableRate(weth.address),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Changes LTV of the reserve', async () => {
@@ -402,8 +392,8 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).setLtv(weth.address, '75'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Changes the reserve factor of the reserve', async () => {
@@ -436,8 +426,8 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).setReserveFactor(weth.address, '2000'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Changes liquidation threshold of the reserve', async () => {
@@ -470,8 +460,8 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).setLiquidationThreshold(weth.address, '80'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Changes liquidation bonus of the reserve', async () => {
@@ -504,24 +494,16 @@ makeSuite('LendingPoolConfigurator', (testEnv: TestEnv) => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).setLiquidationBonus(weth.address, '80'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
- });
-
- it('Check the onlyAaveAdmin on setReserveDecimals', async () => {
- const {configurator, users, weth} = testEnv;
- await expect(
- configurator.connect(users[2].signer).setReserveDecimals(weth.address, '80'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Check the onlyAaveAdmin on setLiquidationBonus', async () => {
const {configurator, users, weth} = testEnv;
await expect(
configurator.connect(users[2].signer).setLiquidationBonus(weth.address, '80'),
- LPC_CALLER_NOT_AAVE_ADMIN
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ CALLER_NOT_POOL_ADMIN
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Reverts when trying to disable the DAI reserve with liquidity on it', async () => {
diff --git a/test/delegation-aware-atoken.spec.ts b/test/delegation-aware-atoken.spec.ts
new file mode 100644
index 00000000..ae1e7783
--- /dev/null
+++ b/test/delegation-aware-atoken.spec.ts
@@ -0,0 +1,58 @@
+import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants';
+import {BUIDLEREVM_CHAINID} from '../helpers/buidler-constants';
+import {buildPermitParams, getSignatureFromTypedData} from '../helpers/contracts-helpers';
+import {expect} from 'chai';
+import {ethers} from 'ethers';
+import {eEthereumNetwork, ProtocolErrors} from '../helpers/types';
+import {makeSuite, TestEnv} from './helpers/make-suite';
+import {DRE} from '../helpers/misc-utils';
+import {
+ ConfigNames,
+ getATokenDomainSeparatorPerNetwork,
+ loadPoolConfig,
+} from '../helpers/configuration';
+import {waitForTx} from '../helpers/misc-utils';
+import {
+ deployDelegationAwareAToken,
+ deployMintableDelegationERC20,
+} from '../helpers/contracts-deployments';
+import {DelegationAwareATokenFactory} from '../types';
+import {DelegationAwareAToken} from '../types/DelegationAwareAToken';
+import {MintableDelegationErc20} from '../types/MintableDelegationErc20';
+
+const {parseEther} = ethers.utils;
+
+makeSuite('AToken: underlying delegation', (testEnv: TestEnv) => {
+ const poolConfig = loadPoolConfig(ConfigNames.Commons);
+ let delegationAToken = {};
+ let delegationERC20 = {};
+
+ it('Deploys a new MintableDelegationERC20 and a DelegationAwareAToken', async () => {
+ const {pool} = testEnv;
+
+ delegationERC20 = await deployMintableDelegationERC20(['DEL', 'DEL', '18']);
+
+ delegationAToken = await deployDelegationAwareAToken(
+ [pool.address, delegationERC20.address, 'aDEL', 'aDEL', ZERO_ADDRESS],
+ false
+ );
+ });
+
+ it('Tries to delegate with the caller not being the Aave admin', async () => {
+ const {users} = testEnv;
+
+ await expect(
+ delegationAToken.connect(users[1].signer).delegateUnderlyingTo(users[2].address)
+ ).to.be.revertedWith(ProtocolErrors.CALLER_NOT_POOL_ADMIN);
+ });
+
+ it('Tries to delegate to user 2', async () => {
+ const {users} = testEnv;
+
+ await delegationAToken.delegateUnderlyingTo(users[2].address);
+
+ const delegateeAddress = await delegationERC20.delegatee();
+
+ expect(delegateeAddress).to.be.equal(users[2].address);
+ });
+});
diff --git a/test/flashloan.spec.ts b/test/flashloan.spec.ts
index 387a091a..b5978d1a 100644
--- a/test/flashloan.spec.ts
+++ b/test/flashloan.spec.ts
@@ -24,7 +24,7 @@ makeSuite('LendingPool FlashLoan function', (testEnv: TestEnv) => {
LP_INVALID_FLASHLOAN_MODE,
SAFEERC20_LOWLEVEL_CALL,
LP_INVALID_FLASH_LOAN_EXECUTOR_RETURN,
- LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH,
+ LP_BORROW_ALLOWANCE_NOT_ENOUGH,
} = ProtocolErrors;
before(async () => {
@@ -443,7 +443,7 @@ makeSuite('LendingPool FlashLoan function', (testEnv: TestEnv) => {
'0x10',
'0'
)
- ).to.be.revertedWith(LP_BORROW_ALLOWANCE_ARE_NOT_ENOUGH);
+ ).to.be.revertedWith(LP_BORROW_ALLOWANCE_NOT_ENOUGH);
});
it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user with allowance. A loan for onBehalfOf is creatd.', async () => {
@@ -454,10 +454,12 @@ makeSuite('LendingPool FlashLoan function', (testEnv: TestEnv) => {
const flashAmount = ethers.utils.parseEther('0.8');
+ const reserveData = await pool.getReserveData(weth.address);
+
+ const stableDebtToken = await getVariableDebtToken(reserveData.stableDebtTokenAddress);
+
// Deposited for onBehalfOf user already, delegate borrow allowance
- await pool
- .connect(onBehalfOf.signer)
- .delegateBorrowAllowance([weth.address], caller.address, [1], [flashAmount]);
+ await stableDebtToken.connect(onBehalfOf.signer).approveDelegation(caller.address, flashAmount);
await _mockFlashLoanReceiver.setFailExecutionTransfer(true);
diff --git a/test/helpers/actions.ts b/test/helpers/actions.ts
index d998962b..bdd286f5 100644
--- a/test/helpers/actions.ts
+++ b/test/helpers/actions.ts
@@ -18,10 +18,15 @@ import {
import {getReserveAddressFromSymbol, getReserveData, getUserData} from './utils/helpers';
import {convertToCurrencyDecimals} from '../../helpers/contracts-helpers';
-import {getAToken, getMintableErc20} from '../../helpers/contracts-getters';
+import {
+ getAToken,
+ getMintableErc20,
+ getStableDebtToken,
+ getVariableDebtToken,
+} from '../../helpers/contracts-getters';
import {MAX_UINT_AMOUNT, ONE_YEAR} from '../../helpers/constants';
import {SignerWithAddress, TestEnv} from './make-suite';
-import {BRE, increaseTime, timeLatest, waitForTx} from '../../helpers/misc-utils';
+import {DRE, increaseTime, timeLatest, waitForTx} from '../../helpers/misc-utils';
import chai from 'chai';
import {ReserveData, UserReserveData} from './utils/interfaces';
@@ -277,9 +282,9 @@ export const withdraw = async (
};
export const delegateBorrowAllowance = async (
- reserveSymbols: string[],
- amounts: string[],
- interestRateModes: string[],
+ reserve: string,
+ amount: string,
+ interestRateMode: string,
user: SignerWithAddress,
receiver: tEthereumAddress,
expectedResult: string,
@@ -288,32 +293,33 @@ export const delegateBorrowAllowance = async (
) => {
const {pool} = testEnv;
- const reserves: tEthereumAddress[] = [];
- const amountsToDelegate: tEthereumAddress[] = [];
- for (const reserveSymbol of reserveSymbols) {
- const newLength = reserves.push(await getReserveAddressFromSymbol(reserveSymbol));
- amountsToDelegate.push(
- await (
- await convertToCurrencyDecimals(reserves[newLength - 1], amounts[newLength - 1])
- ).toString()
- );
- }
+ const reserveAddress: tEthereumAddress = await getReserveAddressFromSymbol(reserve);
- const delegateAllowancePromise = pool
+ const amountToDelegate: string = await (
+ await convertToCurrencyDecimals(reserveAddress, amount)
+ ).toString();
+
+ const reserveData = await pool.getReserveData(reserveAddress);
+
+ const debtToken =
+ interestRateMode === '1'
+ ? await getStableDebtToken(reserveData.stableDebtTokenAddress)
+ : await getVariableDebtToken(reserveData.variableDebtTokenAddress);
+
+ const delegateAllowancePromise = debtToken
.connect(user.signer)
- .delegateBorrowAllowance(reserves, receiver, interestRateModes, amountsToDelegate);
- if (expectedResult === 'revert') {
- await expect(delegateAllowancePromise, revertMessage).to.be.reverted;
+ .approveDelegation(receiver, amountToDelegate);
+
+ if (expectedResult === 'revert' && revertMessage) {
+ await expect(delegateAllowancePromise, revertMessage).to.be.revertedWith(revertMessage);
return;
} else {
await delegateAllowancePromise;
- for (const [i, reserve] of reserves.entries()) {
- expect(
- (
- await pool.getBorrowAllowance(user.address, receiver, reserve, interestRateModes[i])
- ).toString()
- ).to.be.equal(amountsToDelegate[i], 'borrowAllowance are set incorrectly');
- }
+ const allowance = await debtToken.borrowAllowance(user.address, receiver);
+ expect(allowance.toString()).to.be.equal(
+ amountToDelegate,
+ 'borrowAllowance is set incorrectly'
+ );
}
};
@@ -729,9 +735,9 @@ export const getTxCostAndTimestamp = async (tx: ContractReceipt) => {
if (!tx.blockNumber || !tx.transactionHash || !tx.cumulativeGasUsed) {
throw new Error('No tx blocknumber');
}
- const txTimestamp = new BigNumber((await BRE.ethers.provider.getBlock(tx.blockNumber)).timestamp);
+ const txTimestamp = new BigNumber((await DRE.ethers.provider.getBlock(tx.blockNumber)).timestamp);
- const txInfo = await BRE.ethers.provider.getTransaction(tx.transactionHash);
+ const txInfo = await DRE.ethers.provider.getTransaction(tx.transactionHash);
const txCost = new BigNumber(tx.cumulativeGasUsed.toString()).multipliedBy(
txInfo.gasPrice.toString()
);
diff --git a/test/helpers/make-suite.ts b/test/helpers/make-suite.ts
index 62eb1e39..cd927c5b 100644
--- a/test/helpers/make-suite.ts
+++ b/test/helpers/make-suite.ts
@@ -1,18 +1,20 @@
-import {evmRevert, evmSnapshot, BRE} from '../../helpers/misc-utils';
+import {evmRevert, evmSnapshot, DRE} from '../../helpers/misc-utils';
import {Signer} from 'ethers';
import {
getLendingPool,
getLendingPoolAddressesProvider,
- getAaveProtocolTestHelpers,
+ getAaveProtocolDataProvider,
getAToken,
getMintableErc20,
getLendingPoolConfiguratorProxy,
getPriceOracle,
getLendingPoolAddressesProviderRegistry,
+ getWETHMocked,
+ getWETHGateway,
} from '../../helpers/contracts-getters';
import {tEthereumAddress} from '../../helpers/types';
import {LendingPool} from '../../types/LendingPool';
-import {AaveProtocolTestHelpers} from '../../types/AaveProtocolTestHelpers';
+import {AaveProtocolDataProvider} from '../../types/AaveProtocolDataProvider';
import {MintableErc20 as MintableERC20} from '../../types/MintableErc20';
import {AToken} from '../../types/AToken';
import {LendingPoolConfigurator} from '../../types/LendingPoolConfigurator';
@@ -25,8 +27,13 @@ import {PriceOracle} from '../../types/PriceOracle';
import {LendingPoolAddressesProvider} from '../../types/LendingPoolAddressesProvider';
import {LendingPoolAddressesProviderRegistry} from '../../types/LendingPoolAddressesProviderRegistry';
import {getEthersSigners} from '../../helpers/contracts-helpers';
+import {Weth9Mocked} from '../../types/Weth9Mocked';
+import {WethGateway} from '../../types/WethGateway';
+import {solidity} from 'ethereum-waffle';
+
chai.use(bignumberChai());
chai.use(almostEqual());
+chai.use(solidity);
export interface SignerWithAddress {
signer: Signer;
@@ -38,20 +45,21 @@ export interface TestEnv {
pool: LendingPool;
configurator: LendingPoolConfigurator;
oracle: PriceOracle;
- helpersContract: AaveProtocolTestHelpers;
- weth: MintableERC20;
+ helpersContract: AaveProtocolDataProvider;
+ weth: Weth9Mocked;
aWETH: AToken;
dai: MintableERC20;
aDai: AToken;
usdc: MintableERC20;
- lend: MintableERC20;
+ aave: MintableERC20;
addressesProvider: LendingPoolAddressesProvider;
registry: LendingPoolAddressesProviderRegistry;
+ wethGateway: WethGateway;
}
let buidlerevmSnapshotId: string = '0x1';
const setBuidlerevmSnapshotId = (id: string) => {
- if (BRE.network.name === 'buidlerevm') {
+ if (DRE.network.name === 'hardhat') {
buidlerevmSnapshotId = id;
}
};
@@ -61,16 +69,17 @@ const testEnv: TestEnv = {
users: [] as SignerWithAddress[],
pool: {} as LendingPool,
configurator: {} as LendingPoolConfigurator,
- helpersContract: {} as AaveProtocolTestHelpers,
+ helpersContract: {} as AaveProtocolDataProvider,
oracle: {} as PriceOracle,
- weth: {} as MintableERC20,
+ weth: {} as Weth9Mocked,
aWETH: {} as AToken,
dai: {} as MintableERC20,
aDai: {} as AToken,
usdc: {} as MintableERC20,
- lend: {} as MintableERC20,
+ aave: {} as MintableERC20,
addressesProvider: {} as LendingPoolAddressesProvider,
registry: {} as LendingPoolAddressesProviderRegistry,
+ wethGateway: {} as WethGateway,
} as TestEnv;
export async function initializeMakeSuite() {
@@ -95,7 +104,7 @@ export async function initializeMakeSuite() {
testEnv.addressesProvider = await getLendingPoolAddressesProvider();
testEnv.registry = await getLendingPoolAddressesProviderRegistry();
- testEnv.helpersContract = await getAaveProtocolTestHelpers();
+ testEnv.helpersContract = await getAaveProtocolDataProvider();
const allTokens = await testEnv.helpersContract.getAllATokens();
@@ -107,14 +116,14 @@ export async function initializeMakeSuite() {
const daiAddress = reservesTokens.find((token) => token.symbol === 'DAI')?.tokenAddress;
const usdcAddress = reservesTokens.find((token) => token.symbol === 'USDC')?.tokenAddress;
- const lendAddress = reservesTokens.find((token) => token.symbol === 'LEND')?.tokenAddress;
+ const aaveAddress = reservesTokens.find((token) => token.symbol === 'AAVE')?.tokenAddress;
const wethAddress = reservesTokens.find((token) => token.symbol === 'WETH')?.tokenAddress;
if (!aDaiAddress || !aWEthAddress) {
console.log(`atoken-modifiers.spec: aTokens not correctly initialized`);
process.exit(1);
}
- if (!daiAddress || !usdcAddress || !lendAddress || !wethAddress) {
+ if (!daiAddress || !usdcAddress || !aaveAddress || !wethAddress) {
console.log(`atoken-modifiers.spec: USDC or DAI not correctly initialized`);
process.exit(1);
}
@@ -124,8 +133,9 @@ export async function initializeMakeSuite() {
testEnv.dai = await getMintableErc20(daiAddress);
testEnv.usdc = await getMintableErc20(usdcAddress);
- testEnv.lend = await getMintableErc20(lendAddress);
- testEnv.weth = await getMintableErc20(wethAddress);
+ testEnv.aave = await getMintableErc20(aaveAddress);
+ testEnv.weth = await getWETHMocked(wethAddress);
+ testEnv.wethGateway = await getWETHGateway();
}
export function makeSuite(name: string, tests: (testEnv: TestEnv) => void) {
diff --git a/test/helpers/scenario-engine.ts b/test/helpers/scenario-engine.ts
index fe2e302a..bb4f82f8 100644
--- a/test/helpers/scenario-engine.ts
+++ b/test/helpers/scenario-engine.ts
@@ -121,9 +121,9 @@ const executeAction = async (action: Action, users: SignerWithAddress[], testEnv
}
await delegateBorrowAllowance(
- [reserve],
- [amount],
- [rateMode],
+ reserve,
+ amount,
+ rateMode,
user,
toUser,
expected,
diff --git a/test/helpers/scenarios/credit-delegation.json b/test/helpers/scenarios/credit-delegation.json
index a67924ee..a0aecf1b 100644
--- a/test/helpers/scenarios/credit-delegation.json
+++ b/test/helpers/scenarios/credit-delegation.json
@@ -68,7 +68,7 @@
"borrowRateMode": "stable"
},
"expected": "revert",
- "revertMessage": "54"
+ "revertMessage": "59"
}
]
},
@@ -96,7 +96,7 @@
"borrowRateMode": "variable"
},
"expected": "revert",
- "revertMessage": "54"
+ "revertMessage": "59"
}
]
},
@@ -126,23 +126,6 @@
"expected": "success"
}
]
- },
- {
- "description": "User 0 delegates borrowing of 1 WETH to user 2 with wrong borrowRateMode, revert expected",
- "actions": [
- {
- "name": "delegateBorrowAllowance",
- "args": {
- "reserve": "WETH",
- "amount": "1",
- "user": "0",
- "borrowRateMode": "random",
- "toUser": "2"
- },
- "expected": "revert",
- "revertMessage": "8"
- }
- ]
}
]
}
diff --git a/test/helpers/scenarios/set-use-as-collateral.json b/test/helpers/scenarios/set-use-as-collateral.json
index 871a78b9..53b5128e 100644
--- a/test/helpers/scenarios/set-use-as-collateral.json
+++ b/test/helpers/scenarios/set-use-as-collateral.json
@@ -136,13 +136,13 @@
]
},
{
- "description": "User 1 Deposits 1000 LEND, disables WETH as collateral. Should revert as 1000 LEND are not enough to cover the debt (revert expected)",
+ "description": "User 1 Deposits 1000 AAVE, disables WETH as collateral. Should revert as 1000 AAVE are not enough to cover the debt (revert expected)",
"actions": [
{
"name": "mint",
"args": {
- "reserve": "LEND",
- "amount": "1000",
+ "reserve": "AAVE",
+ "amount": "10",
"user": "1"
},
"expected": "success"
@@ -150,7 +150,7 @@
{
"name": "approve",
"args": {
- "reserve": "LEND",
+ "reserve": "AAVE",
"user": "1"
},
"expected": "success"
@@ -158,9 +158,9 @@
{
"name": "deposit",
"args": {
- "reserve": "LEND",
+ "reserve": "AAVE",
- "amount": "1000",
+ "amount": "10",
"user": "1"
},
"expected": "success"
@@ -178,13 +178,13 @@
]
},
{
- "description": "User 1 Deposits 64000 more LEND (enough to cover the DAI debt), disables WETH as collateral",
+ "description": "User 1 Deposits 640 more AAVE (enough to cover the DAI debt), disables WETH as collateral",
"actions": [
{
"name": "mint",
"args": {
- "reserve": "LEND",
- "amount": "64000",
+ "reserve": "AAVE",
+ "amount": "640",
"user": "1"
},
"expected": "success"
@@ -192,9 +192,9 @@
{
"name": "deposit",
"args": {
- "reserve": "LEND",
+ "reserve": "AAVE",
- "amount": "64000",
+ "amount": "640",
"user": "1"
},
"expected": "success"
@@ -212,17 +212,32 @@
]
},
{
- "description": "User 1 disables LEND as collateral (revert expected)",
+ "description": "User 1 disables AAVE as collateral (revert expected)",
"actions": [
{
"name": "setUseAsCollateral",
"args": {
- "reserve": "LEND",
+ "reserve": "AAVE",
"user": "1",
"useAsCollateral": "false"
},
- "expected": "User deposit is already being used as collateral"
+ "expected": "revert"
+ }
+ ]
+ },
+ {
+ "description": "User 1 reenables WETH as collateral",
+ "actions": [
+ {
+ "name": "setUseAsCollateral",
+ "args": {
+ "reserve": "WETH",
+
+ "user": "1",
+ "useAsCollateral": "true"
+ },
+ "expected": "success"
}
]
}
diff --git a/test/helpers/utils/helpers.ts b/test/helpers/utils/helpers.ts
index 7a909c20..f36a8fdb 100644
--- a/test/helpers/utils/helpers.ts
+++ b/test/helpers/utils/helpers.ts
@@ -10,11 +10,11 @@ import {
} from '../../../helpers/contracts-getters';
import {tEthereumAddress} from '../../../helpers/types';
import BigNumber from 'bignumber.js';
-import {getDb, BRE} from '../../../helpers/misc-utils';
-import {AaveProtocolTestHelpers} from '../../../types/AaveProtocolTestHelpers';
+import {getDb, DRE} from '../../../helpers/misc-utils';
+import {AaveProtocolDataProvider} from '../../../types/AaveProtocolDataProvider';
export const getReserveData = async (
- helper: AaveProtocolTestHelpers,
+ helper: AaveProtocolDataProvider,
reserve: tEthereumAddress
): Promise => {
const [reserveData, tokenAddresses, rateOracle, token] = await Promise.all([
@@ -74,7 +74,7 @@ export const getReserveData = async (
export const getUserData = async (
pool: LendingPool,
- helper: AaveProtocolTestHelpers,
+ helper: AaveProtocolDataProvider,
reserve: string,
user: tEthereumAddress,
sender?: tEthereumAddress
@@ -104,7 +104,7 @@ export const getUserData = async (
export const getReserveAddressFromSymbol = async (symbol: string) => {
const token = await getMintableErc20(
- (await getDb().get(`${symbol}.${BRE.network.name}`).value()).address
+ (await getDb().get(`${symbol}.${DRE.network.name}`).value()).address
);
if (!token) {
@@ -116,7 +116,7 @@ export const getReserveAddressFromSymbol = async (symbol: string) => {
const getATokenUserData = async (
reserve: string,
user: string,
- helpersContract: AaveProtocolTestHelpers
+ helpersContract: AaveProtocolDataProvider
) => {
const aTokenAddress: string = (await helpersContract.getReserveTokensAddresses(reserve))
.aTokenAddress;
diff --git a/test/lending-pool-addresses-provider.spec.ts b/test/lending-pool-addresses-provider.spec.ts
index 4858531a..97327d4f 100644
--- a/test/lending-pool-addresses-provider.spec.ts
+++ b/test/lending-pool-addresses-provider.spec.ts
@@ -21,7 +21,7 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => {
addressesProvider.setLendingPoolImpl,
addressesProvider.setLendingPoolConfiguratorImpl,
addressesProvider.setLendingPoolCollateralManager,
- addressesProvider.setAaveAdmin,
+ addressesProvider.setPoolAdmin,
addressesProvider.setPriceOracle,
addressesProvider.setLendingRateOracle,
]) {
@@ -31,28 +31,61 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => {
await expect(
addressesProvider.setAddress(
utils.keccak256(utils.toUtf8Bytes('RANDOM_ID')),
- mockAddress,
- ZERO_ADDRESS
+ mockAddress
)
).to.be.revertedWith(INVALID_OWNER_REVERT_MSG);
+
+ await expect(
+ addressesProvider.setAddressAsProxy(
+ utils.keccak256(utils.toUtf8Bytes('RANDOM_ID')),
+ mockAddress
+ )
+ ).to.be.revertedWith(INVALID_OWNER_REVERT_MSG);
+
});
- it('Tests adding both a proxied and non-proxied addres with `setAddress()`', async () => {
+ it('Tests adding a proxied address with `setAddressAsProxy()`', async () => {
const {addressesProvider, users} = testEnv;
const {INVALID_OWNER_REVERT_MSG} = ProtocolErrors;
const currentAddressesProviderOwner = users[1];
- const mockNonProxiedAddress = createRandomAddress();
- const nonProxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_NON_PROXIED'));
const mockLendingPool = await deployLendingPool();
const proxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_PROXIED'));
+ const proxiedAddressSetReceipt = await waitForTx(
+ await addressesProvider
+ .connect(currentAddressesProviderOwner.signer)
+ .setAddressAsProxy(proxiedAddressId, mockLendingPool.address)
+ );
+
+ if (!proxiedAddressSetReceipt.events || proxiedAddressSetReceipt.events?.length < 1) {
+ throw new Error('INVALID_EVENT_EMMITED');
+ }
+
+ expect(proxiedAddressSetReceipt.events[0].event).to.be.equal('ProxyCreated');
+ expect(proxiedAddressSetReceipt.events[1].event).to.be.equal('AddressSet');
+ expect(proxiedAddressSetReceipt.events[1].args?.id).to.be.equal(proxiedAddressId);
+ expect(proxiedAddressSetReceipt.events[1].args?.newAddress).to.be.equal(
+ mockLendingPool.address
+ );
+ expect(proxiedAddressSetReceipt.events[1].args?.hasProxy).to.be.equal(true);
+ });
+
+
+ it('Tests adding a non proxied address with `setAddress()`', async () => {
+ const {addressesProvider, users} = testEnv;
+ const {INVALID_OWNER_REVERT_MSG} = ProtocolErrors;
+
+ const currentAddressesProviderOwner = users[1];
+ const mockNonProxiedAddress = createRandomAddress();
+ const nonProxiedAddressId = utils.keccak256(utils.toUtf8Bytes('RANDOM_NON_PROXIED'));
+
const nonProxiedAddressSetReceipt = await waitForTx(
await addressesProvider
.connect(currentAddressesProviderOwner.signer)
- .setAddress(nonProxiedAddressId, mockNonProxiedAddress, ZERO_ADDRESS)
+ .setAddress(nonProxiedAddressId, mockNonProxiedAddress)
);
expect(mockNonProxiedAddress.toLowerCase()).to.be.equal(
@@ -70,22 +103,5 @@ makeSuite('LendingPoolAddressesProvider', (testEnv: TestEnv) => {
);
expect(nonProxiedAddressSetReceipt.events[0].args?.hasProxy).to.be.equal(false);
- const proxiedAddressSetReceipt = await waitForTx(
- await addressesProvider
- .connect(currentAddressesProviderOwner.signer)
- .setAddress(proxiedAddressId, ZERO_ADDRESS, mockLendingPool.address)
- );
-
- if (!proxiedAddressSetReceipt.events || proxiedAddressSetReceipt.events?.length < 2) {
- throw new Error('INVALID_EVENT_EMMITED');
- }
-
- expect(proxiedAddressSetReceipt.events[0].event).to.be.equal('ProxyCreated');
- expect(proxiedAddressSetReceipt.events[1].event).to.be.equal('AddressSet');
- expect(proxiedAddressSetReceipt.events[1].args?.id).to.be.equal(proxiedAddressId);
- expect(proxiedAddressSetReceipt.events[1].args?.newAddress).to.be.equal(
- mockLendingPool.address
- );
- expect(proxiedAddressSetReceipt.events[1].args?.hasProxy).to.be.equal(true);
});
});
diff --git a/test/liquidation-atoken.spec.ts b/test/liquidation-atoken.spec.ts
index 8d4ba803..b0f65336 100644
--- a/test/liquidation-atoken.spec.ts
+++ b/test/liquidation-atoken.spec.ts
@@ -1,6 +1,6 @@
import BigNumber from 'bignumber.js';
-import {BRE} from '../helpers/misc-utils';
+import {DRE} from '../helpers/misc-utils';
import {oneEther} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {makeSuite} from './helpers/make-suite';
@@ -96,7 +96,10 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
const userGlobalData = await pool.getUserAccountData(borrower.address);
- expect(userGlobalData.healthFactor.toString()).to.be.bignumber.lt(oneEther, INVALID_HF);
+ expect(userGlobalData.healthFactor.toString()).to.be.bignumber.lt(
+ oneEther.toString(),
+ INVALID_HF
+ );
});
it('LIQUIDATION - Tries to liquidate a different currency than the loan principal', async () => {
@@ -182,7 +185,7 @@ makeSuite('LendingPool liquidation - liquidator receiving aToken', (testEnv) =>
}
const txTimestamp = new BigNumber(
- (await BRE.ethers.provider.getBlock(tx.blockNumber)).timestamp
+ (await DRE.ethers.provider.getBlock(tx.blockNumber)).timestamp
);
const variableDebtBeforeTx = calcExpectedVariableDebtTokenBalance(
diff --git a/test/liquidation-underlying.spec.ts b/test/liquidation-underlying.spec.ts
index 1bba749d..cccd46e8 100644
--- a/test/liquidation-underlying.spec.ts
+++ b/test/liquidation-underlying.spec.ts
@@ -1,6 +1,6 @@
import BigNumber from 'bignumber.js';
-import {BRE, increaseTime} from '../helpers/misc-utils';
+import {DRE, increaseTime} from '../helpers/misc-utils';
import {oneEther} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {makeSuite} from './helpers/make-suite';
@@ -185,7 +185,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
return;
}
const txTimestamp = new BigNumber(
- (await BRE.ethers.provider.getBlock(tx.blockNumber)).timestamp
+ (await DRE.ethers.provider.getBlock(tx.blockNumber)).timestamp
);
const stableDebtBeforeTx = calcExpectedStableDebtTokenBalance(
@@ -302,7 +302,7 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
const usdcReserveDataBefore = await helpersContract.getReserveData(usdc.address);
const ethReserveDataBefore = await helpersContract.getReserveData(weth.address);
- const amountToLiquidate = BRE.ethers.BigNumber.from(
+ const amountToLiquidate = DRE.ethers.BigNumber.from(
userReserveDataBefore.currentStableDebt.toString()
)
.div(2)
@@ -380,25 +380,25 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
);
});
- it('User 4 deposits 1000 LEND - drops HF, liquidates the LEND, which results on a lower amount being liquidated', async () => {
- const {lend, usdc, users, pool, oracle, helpersContract} = testEnv;
+ it('User 4 deposits 10 AAVE - drops HF, liquidates the AAVE, which results on a lower amount being liquidated', async () => {
+ const {aave, usdc, users, pool, oracle, helpersContract} = testEnv;
const depositor = users[3];
const borrower = users[4];
const liquidator = users[5];
- //mints LEND to borrower
- await lend.connect(borrower.signer).mint(await convertToCurrencyDecimals(lend.address, '1000'));
+ //mints AAVE to borrower
+ await aave.connect(borrower.signer).mint(await convertToCurrencyDecimals(aave.address, '10'));
//approve protocol to access the borrower wallet
- await lend.connect(borrower.signer).approve(pool.address, APPROVAL_AMOUNT_LENDING_POOL);
+ await aave.connect(borrower.signer).approve(pool.address, APPROVAL_AMOUNT_LENDING_POOL);
- //borrower deposits 1000 LEND
- const amountLENDtoDeposit = await convertToCurrencyDecimals(lend.address, '1000');
+ //borrower deposits 10 AAVE
+ const amountToDeposit = await convertToCurrencyDecimals(aave.address, '10');
await pool
.connect(borrower.signer)
- .deposit(lend.address, amountLENDtoDeposit, borrower.address, '0');
+ .deposit(aave.address, amountToDeposit, borrower.address, '0');
const usdcPrice = await oracle.getAssetPrice(usdc.address);
//drops HF below 1
@@ -421,19 +421,19 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
);
const usdcReserveDataBefore = await helpersContract.getReserveData(usdc.address);
- const lendReserveDataBefore = await helpersContract.getReserveData(lend.address);
+ const aaveReserveDataBefore = await helpersContract.getReserveData(aave.address);
const amountToLiquidate = new BigNumber(userReserveDataBefore.currentStableDebt.toString())
.div(2)
.decimalPlaces(0, BigNumber.ROUND_DOWN)
.toFixed(0);
- const collateralPrice = await oracle.getAssetPrice(lend.address);
+ const collateralPrice = await oracle.getAssetPrice(aave.address);
const principalPrice = await oracle.getAssetPrice(usdc.address);
await pool
.connect(liquidator.signer)
- .liquidationCall(lend.address, usdc.address, borrower.address, amountToLiquidate, false);
+ .liquidationCall(aave.address, usdc.address, borrower.address, amountToLiquidate, false);
const userReserveDataAfter = await helpersContract.getUserReserveData(
usdc.address,
@@ -443,17 +443,17 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
const userGlobalDataAfter = await pool.getUserAccountData(borrower.address);
const usdcReserveDataAfter = await helpersContract.getReserveData(usdc.address);
- const lendReserveDataAfter = await helpersContract.getReserveData(lend.address);
+ const aaveReserveDataAfter = await helpersContract.getReserveData(aave.address);
- const lendConfiguration = await helpersContract.getReserveConfigurationData(lend.address);
- const collateralDecimals = lendConfiguration.decimals.toString();
- const liquidationBonus = lendConfiguration.liquidationBonus.toString();
+ const aaveConfiguration = await helpersContract.getReserveConfigurationData(aave.address);
+ const collateralDecimals = aaveConfiguration.decimals.toString();
+ const liquidationBonus = aaveConfiguration.liquidationBonus.toString();
const principalDecimals = (
await helpersContract.getReserveConfigurationData(usdc.address)
).decimals.toString();
- const expectedCollateralLiquidated = oneEther.multipliedBy('1000');
+ const expectedCollateralLiquidated = oneEther.multipliedBy('10');
const expectedPrincipal = new BigNumber(collateralPrice.toString())
.times(expectedCollateralLiquidated)
@@ -484,8 +484,8 @@ makeSuite('LendingPool liquidation - liquidator receiving the underlying asset',
'Invalid principal available liquidity'
);
- expect(lendReserveDataAfter.availableLiquidity.toString()).to.be.bignumber.almostEqual(
- new BigNumber(lendReserveDataBefore.availableLiquidity.toString())
+ expect(aaveReserveDataAfter.availableLiquidity.toString()).to.be.bignumber.almostEqual(
+ new BigNumber(aaveReserveDataBefore.availableLiquidity.toString())
.minus(expectedCollateralLiquidated)
.toFixed(0),
'Invalid collateral available liquidity'
diff --git a/test/pausable-functions.spec.ts b/test/pausable-functions.spec.ts
index 9c7f6473..56278f66 100644
--- a/test/pausable-functions.spec.ts
+++ b/test/pausable-functions.spec.ts
@@ -39,7 +39,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
const user1Balance = await aDai.balanceOf(users[1].address);
// Configurator pauses the pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// User 0 tries the transfer to User 1
await expect(
@@ -59,7 +59,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
);
// Configurator unpauses the pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
// User 0 succeeds transfer to User 1
await aDai.connect(users[0].signer).transfer(users[1].address, amountDAItoDeposit);
@@ -88,13 +88,13 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
await dai.connect(users[0].signer).approve(pool.address, APPROVAL_AMOUNT_LENDING_POOL);
// Configurator pauses the pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
await expect(
pool.connect(users[0].signer).deposit(dai.address, amountDAItoDeposit, users[0].address, '0')
).to.revertedWith(LP_IS_PAUSED);
// Configurator unpauses the pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('Withdraw', async () => {
@@ -111,7 +111,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
.deposit(dai.address, amountDAItoDeposit, users[0].address, '0');
// Configurator pauses the pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// user tries to burn
await expect(
@@ -119,24 +119,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
).to.revertedWith(LP_IS_PAUSED);
// Configurator unpauses the pool
- await configurator.setPoolPause(false);
- });
-
- it('DelegateBorrowAllowance', async () => {
- const {pool, dai, users, configurator} = testEnv;
-
- const user = users[1];
- const toUser = users[2];
- // Pause the pool
- await configurator.setPoolPause(true);
-
- // Try to execute liquidation
- await expect(
- pool.connect(user.signer).delegateBorrowAllowance([dai.address], toUser.address, ['1'], ['1'])
- ).revertedWith(LP_IS_PAUSED);
-
- // Unpause the pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('Borrow', async () => {
@@ -144,7 +127,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
const user = users[1];
// Pause the pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// Try to execute liquidation
await expect(
@@ -152,7 +135,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
).revertedWith(LP_IS_PAUSED);
// Unpause the pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('Repay', async () => {
@@ -160,7 +143,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
const user = users[1];
// Pause the pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// Try to execute liquidation
await expect(pool.connect(user.signer).repay(dai.address, '1', '1', user.address)).revertedWith(
@@ -168,7 +151,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
);
// Unpause the pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('Flash loan', async () => {
@@ -181,7 +164,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
await _mockFlashLoanReceiver.setFailExecutionTransfer(true);
// Pause pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
await expect(
pool
@@ -198,7 +181,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
).revertedWith(LP_IS_PAUSED);
// Unpause pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('Liquidation call', async () => {
@@ -271,15 +254,15 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
.toFixed(0);
// Pause pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// Do liquidation
- expect(
+ await expect(
pool.liquidationCall(weth.address, usdc.address, borrower.address, amountToLiquidate, true)
).revertedWith(LP_IS_PAUSED);
// Unpause pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('SwapBorrowRateMode', async () => {
@@ -300,7 +283,7 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
await pool.connect(user.signer).borrow(usdc.address, amountToBorrow, 2, 0, user.address);
// Pause pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
// Try to repay
await expect(
@@ -308,21 +291,21 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
).revertedWith(LP_IS_PAUSED);
// Unpause pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('RebalanceStableBorrowRate', async () => {
const {pool, dai, users, configurator} = testEnv;
const user = users[1];
// Pause pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
await expect(
pool.connect(user.signer).rebalanceStableBorrowRate(dai.address, user.address)
).revertedWith(LP_IS_PAUSED);
// Unpause pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
it('setUserUseReserveAsCollateral', async () => {
@@ -335,13 +318,13 @@ makeSuite('Pausable Pool', (testEnv: TestEnv) => {
await pool.connect(user.signer).deposit(weth.address, amountWETHToDeposit, user.address, '0');
// Pause pool
- await configurator.setPoolPause(true);
+ await configurator.connect(users[1].signer).setPoolPause(true);
await expect(
pool.connect(user.signer).setUserUseReserveAsCollateral(weth.address, false)
).revertedWith(LP_IS_PAUSED);
// Unpause pool
- await configurator.setPoolPause(false);
+ await configurator.connect(users[1].signer).setPoolPause(false);
});
});
diff --git a/test/stable-token.spec.ts b/test/stable-token.spec.ts
index 02348d8b..fecc3e78 100644
--- a/test/stable-token.spec.ts
+++ b/test/stable-token.spec.ts
@@ -16,9 +16,9 @@ makeSuite('Stable debt token tests', (testEnv: TestEnv) => {
const stableDebtContract = await getStableDebtToken(daiStableDebtTokenAddress);
- await expect(stableDebtContract.mint(deployer.address, '1', '1')).to.be.revertedWith(
- AT_CALLER_MUST_BE_LENDING_POOL
- );
+ await expect(
+ stableDebtContract.mint(deployer.address, deployer.address, '1', '1')
+ ).to.be.revertedWith(AT_CALLER_MUST_BE_LENDING_POOL);
});
it('Tries to invoke burn not being the LendingPool', async () => {
diff --git a/test/token-distributor.spec.ts b/test/token-distributor.spec.ts
deleted file mode 100644
index fc8c822b..00000000
--- a/test/token-distributor.spec.ts
+++ /dev/null
@@ -1,277 +0,0 @@
-// import {
-// ITestEnv,
-// ContractsInstancesOrigin,
-// iBasicDistributionParams,
-// iTokenBalances,
-// iDistributionParams,
-// } from '../utils/types';
-// import {
-// TokenDistributorInstance,
-// MintableERC20Instance,
-// } from '../utils/typechain-types/truffle-contracts';
-// import {testEnvProvider} from '../utils/truffle/dlp-tests-env';
-// import {
-// TOKEN_DISTRIBUTOR_PERCENTAGE_BASE,
-// ETHEREUM_ADDRESS,
-// ONE_ADDRESS,
-// NIL_ADDRESS,
-// } from '../utils/constants';
-// import BigNumber from 'bignumber.js';
-
-// import {expect} from 'chai';
-
-// const testAndExecMintAndTransferTokens = async (
-// tokenInstance: MintableERC20Instance,
-// amount: string,
-// minter: string,
-// receiver: string
-// ) => {
-// const initialMinterBalance = new BigNumber(await tokenInstance.balanceOf(minter));
-// const initialReceiverBalance = new BigNumber(await tokenInstance.balanceOf(receiver));
-// await tokenInstance.mint(amount, {
-// from: minter,
-// });
-
-// expect(initialMinterBalance.plus(amount).toFixed()).to.be.equal(
-// new BigNumber(await tokenInstance.balanceOf(minter)).toFixed()
-// );
-
-// await tokenInstance.transfer(receiver, amount, {from: minter});
-
-// expect(initialReceiverBalance.plus(amount).toFixed()).to.be.equal(
-// new BigNumber(await tokenInstance.balanceOf(receiver)).toFixed()
-// );
-// };
-
-// const testAndExecEthTransfer = async (
-// amount: string,
-// sender: string,
-// receiver: string,
-// web3: Web3
-// ) => {
-// const initialReceiverEthBalance = await web3.eth.getBalance(receiver);
-// await web3.eth.sendTransaction({
-// from: sender,
-// to: receiver,
-// value: amount,
-// });
-
-// expect(new BigNumber(initialReceiverEthBalance).plus(amount).toFixed()).to.be.equal(
-// await web3.eth.getBalance(receiver)
-// );
-// };
-
-// const testAndExecDistributeToken = async (
-// tokenInstances: MintableERC20Instance[],
-// tokenToBurnInstance: MintableERC20Instance,
-// tokenDistributorInstance: TokenDistributorInstance,
-// distributionParams: iBasicDistributionParams[]
-// ) => {
-// const tokenBalancesBefore: iTokenBalances[] = [];
-// for (const [index, tokenInstance] of tokenInstances.entries()) {
-// const {receivers} = distributionParams[index];
-// const tokenBalancesReceiversBefore: string[][] = [[], []];
-// for (const receiver of receivers) {
-// if (receiver.toUpperCase() !== NIL_ADDRESS.toUpperCase()) {
-// tokenBalancesReceiversBefore[index].push(
-// (await tokenInstance.balanceOf(receiver)).toString()
-// );
-// } else {
-// tokenBalancesReceiversBefore[index].push(
-// (await tokenToBurnInstance.balanceOf(
-// await tokenDistributorInstance.recipientBurn()
-// )).toString()
-// );
-// }
-// }
-// tokenBalancesBefore.push({
-// tokenDistributor: (await tokenInstance.balanceOf(
-// tokenDistributorInstance.address
-// )).toString(),
-// receivers: tokenBalancesReceiversBefore[index],
-// });
-// }
-
-// const tokenDistribution = await tokenDistributorInstance.getDistribution();
-
-// await tokenDistributorInstance.distribute(
-// tokenInstances.map(tokenInstance => tokenInstance.address)
-// );
-
-// const tokenBalanceOfDistributorAfter: string[] = [];
-// for (const [indexToken, tokenInstance] of tokenInstances.entries()) {
-// const newLength = tokenBalanceOfDistributorAfter.push(
-// (await tokenInstance.balanceOf(tokenDistributorInstance.address)).toString()
-// );
-// const receivers = distributionParams[indexToken].receivers;
-// expect(parseInt(tokenBalanceOfDistributorAfter[newLength - 1])).to.be.within(
-// 0,
-// receivers.length - 1
-// );
-
-// for (const [indexReceiver, receiver] of receivers.entries()) {
-// const receiverPercentage = new BigNumber(tokenDistribution[1][indexReceiver]).toFixed();
-// const tokenAmountToReceiver = new BigNumber(tokenBalancesBefore[indexToken].tokenDistributor)
-// .multipliedBy(receiverPercentage)
-// .dividedBy(TOKEN_DISTRIBUTOR_PERCENTAGE_BASE)
-// .toFixed(0, BigNumber.ROUND_DOWN);
-// const tokenBalanceOfReceiverAfter = (await tokenInstance.balanceOf(receiver)).toString();
-// const recipientBurnBalanceAfter = (await tokenToBurnInstance.balanceOf(
-// await tokenDistributorInstance.recipientBurn()
-// )).toString();
-// if (receiver.toUpperCase() !== NIL_ADDRESS.toUpperCase()) {
-// expect(tokenBalanceOfReceiverAfter).to.be.equal(
-// new BigNumber(tokenBalancesBefore[indexToken].receivers[indexReceiver])
-// .plus(tokenAmountToReceiver)
-// .toFixed()
-// );
-// } else {
-// // 1 ether received from "burning" DAI and 264 LEND wei received from the 34% of the 777 LEND amount sent to the token distributor
-// expect(recipientBurnBalanceAfter).to.be.equal('1000000000000000264');
-// }
-// }
-// }
-// };
-
-// const testAndExecDistributeEth = async (
-// tokenDistributorInstance: TokenDistributorInstance,
-// tokenToBurnInstance: MintableERC20Instance,
-// distributionParams: iBasicDistributionParams,
-// web3: Web3
-// ) => {
-// const {receivers} = distributionParams;
-
-// const ethBalancesReceiversBefore = [];
-// for (const receiver of receivers) {
-// if (receiver.toUpperCase() !== NIL_ADDRESS.toUpperCase()) {
-// ethBalancesReceiversBefore.push(await web3.eth.getBalance(receiver));
-// } else {
-// ethBalancesReceiversBefore.push(await web3.eth.getBalance(ONE_ADDRESS));
-// }
-// }
-// const ethBalancesBefore: iTokenBalances = {
-// tokenDistributor: await web3.eth.getBalance(tokenDistributorInstance.address),
-// receivers: ethBalancesReceiversBefore,
-// };
-
-// const ethDistribution = await tokenDistributorInstance.getDistribution();
-
-// await tokenDistributorInstance.distribute([ETHEREUM_ADDRESS]);
-
-// const ethBalanceOfDistributorAfter = await web3.eth.getBalance(tokenDistributorInstance.address);
-
-// expect(parseInt(ethBalanceOfDistributorAfter)).to.be.within(0, receivers.length - 1);
-
-// for (const [index, receiver] of receivers.entries()) {
-// const receiverPercentage = new BigNumber(ethDistribution[1][index]).toFixed();
-// const ethAmountToReceiver = new BigNumber(ethBalancesBefore.tokenDistributor)
-// .multipliedBy(receiverPercentage)
-// .dividedBy(TOKEN_DISTRIBUTOR_PERCENTAGE_BASE)
-// .toFixed(0, BigNumber.ROUND_DOWN);
-// const ethBalanceOfReceiverAfter = await web3.eth.getBalance(receiver);
-// const recipientBurnBalanceAfter = (await tokenToBurnInstance.balanceOf(
-// await tokenDistributorInstance.recipientBurn()
-// )).toString();
-// if (receiver.toUpperCase() !== NIL_ADDRESS.toUpperCase()) {
-// expect(ethBalanceOfReceiverAfter).to.be.equal(
-// new BigNumber(ethBalancesBefore.receivers[index]).plus(ethAmountToReceiver).toFixed()
-// );
-// } else {
-// // 1 ether received from "burning" DAI, 1 ether from ETH and 264 LEND wei received from the 34% of the 777 LEND amount sent to the token distributor
-// expect(recipientBurnBalanceAfter).to.be.equal('2000000000000000264');
-// }
-// }
-// };
-
-// contract('TokenDistributor', async ([deployer, ...users]) => {
-// // let _testEnvProvider: ITestEnv;
-// // let _tokenDistributorInstance: TokenDistributorInstance;
-// // let _tokenInstances: iAavePoolAssets;
-// // let _web3: Web3;
-// // let _depositorAddress: string;
-// // let _daiDistributionParams: iDistributionParams;
-// // let _lendDistributionParams: iDistributionParams;
-// // let _ethDistributionParams: iDistributionParams;
-
-// // before('Initializing LendingPoolConfigurator test variables', async () => {
-// // _testEnvProvider = await testEnvProvider(
-// // artifacts,
-// // [deployer, ...users],
-// // ContractsInstancesOrigin.TruffleArtifacts
-// // );
-
-// // const {
-// // deployedInstances: {tokenDistributorInstance},
-// // getAllAssetsInstances,
-// // getWeb3,
-// // getFirstDepositorAddressOnTests,
-// // getFeeDistributionParams,
-// // } = _testEnvProvider;
-// // _tokenDistributorInstance = tokenDistributorInstance;
-// // _tokenInstances = await getAllAssetsInstances();
-// // _web3 = await getWeb3();
-// // _depositorAddress = await getFirstDepositorAddressOnTests();
-
-// // const {receivers, percentages} = await getFeeDistributionParams();
-// // _daiDistributionParams = {
-// // amountToDistribute: '333',
-// // receivers,
-// // percentages,
-// // };
-// // _lendDistributionParams = {
-// // amountToDistribute: '777',
-// // receivers,
-// // percentages,
-// // };
-// // _ethDistributionParams = {
-// // amountToDistribute: '2534',
-// // receivers,
-// // percentages,
-// // };
-// // });
-
-// // it('Transfers ETH to the TokenDistributor', async () => {
-// // await testAndExecEthTransfer(
-// // _ethDistributionParams.amountToDistribute,
-// // deployer,
-// // _tokenDistributorInstance.address,
-// // _web3
-// // );
-// // });
-
-// // it('Mints and transfers DAI to the TokenDistributor', async () => {
-// // await testAndExecMintAndTransferTokens(
-// // _tokenInstances.DAI,
-// // _daiDistributionParams.amountToDistribute,
-// // _depositorAddress,
-// // _tokenDistributorInstance.address
-// // );
-// // });
-
-// // it('Mints and transfers LEND to the TokenDistributor', async () => {
-// // await testAndExecMintAndTransferTokens(
-// // _tokenInstances.LEND,
-// // _lendDistributionParams.amountToDistribute,
-// // _depositorAddress,
-// // _tokenDistributorInstance.address
-// // );
-// // });
-
-// // it('distribute() for the receivers', async () => {
-// // await testAndExecDistributeToken(
-// // [_tokenInstances.DAI, _tokenInstances.LEND],
-// // _tokenInstances.LEND,
-// // _tokenDistributorInstance,
-// // [_daiDistributionParams, _lendDistributionParams]
-// // );
-// // });
-
-// // it('Distributes the ETH to the receivers', async () => {
-// // await testAndExecDistributeEth(
-// // _tokenDistributorInstance,
-// // _tokenInstances.LEND,
-// // _ethDistributionParams,
-// // _web3
-// // );
-// // });
-// });
diff --git a/test/upgradeability.spec.ts b/test/upgradeability.spec.ts
index 93fb1ddd..92ab1ee1 100644
--- a/test/upgradeability.spec.ts
+++ b/test/upgradeability.spec.ts
@@ -19,7 +19,7 @@ import {
} from '../helpers/contracts-deployments';
makeSuite('Upgradeability', (testEnv: TestEnv) => {
- const {LPC_CALLER_NOT_AAVE_ADMIN} = ProtocolErrors;
+ const {CALLER_NOT_POOL_ADMIN} = ProtocolErrors;
let newATokenAddress: string;
let newStableTokenAddress: string;
let newVariableTokenAddress: string;
@@ -61,7 +61,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => {
await expect(
configurator.connect(users[1].signer).updateAToken(dai.address, newATokenAddress)
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Upgrades the DAI Atoken implementation ', async () => {
@@ -83,7 +83,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => {
configurator
.connect(users[1].signer)
.updateStableDebtToken(dai.address, newStableTokenAddress)
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Upgrades the DAI stable debt token implementation ', async () => {
@@ -109,7 +109,7 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => {
configurator
.connect(users[1].signer)
.updateVariableDebtToken(dai.address, newVariableTokenAddress)
- ).to.be.revertedWith(LPC_CALLER_NOT_AAVE_ADMIN);
+ ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN);
});
it('Upgrades the DAI variable debt token implementation ', async () => {
diff --git a/test/variable-debt-token.spec.ts b/test/variable-debt-token.spec.ts
index 5e21f939..6c177096 100644
--- a/test/variable-debt-token.spec.ts
+++ b/test/variable-debt-token.spec.ts
@@ -15,9 +15,9 @@ makeSuite('Variable debt token tests', (testEnv: TestEnv) => {
const variableDebtContract = await getVariableDebtToken(daiVariableDebtTokenAddress);
- await expect(variableDebtContract.mint(deployer.address, '1', '1')).to.be.revertedWith(
- AT_CALLER_MUST_BE_LENDING_POOL
- );
+ await expect(
+ variableDebtContract.mint(deployer.address, deployer.address, '1', '1')
+ ).to.be.revertedWith(AT_CALLER_MUST_BE_LENDING_POOL);
});
it('Tries to invoke burn not being the LendingPool', async () => {
diff --git a/test/weth-gateway.spec.ts b/test/weth-gateway.spec.ts
new file mode 100644
index 00000000..20393b85
--- /dev/null
+++ b/test/weth-gateway.spec.ts
@@ -0,0 +1,350 @@
+import {MAX_UINT_AMOUNT} from '../helpers/constants';
+import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
+import {makeSuite, TestEnv} from './helpers/make-suite';
+import {parseEther} from 'ethers/lib/utils';
+import {DRE, waitForTx} from '../helpers/misc-utils';
+import {BigNumber} from 'ethers';
+import {getStableDebtToken, getVariableDebtToken} from '../helpers/contracts-getters';
+import {deploySelfdestructTransferMock} from '../helpers/contracts-deployments';
+
+const {expect} = require('chai');
+
+makeSuite('Use native ETH at LendingPool via WETHGateway', (testEnv: TestEnv) => {
+ const zero = BigNumber.from('0');
+ const depositSize = parseEther('5');
+
+ it('Deposit WETH', async () => {
+ const {users, wethGateway, aWETH, pool} = testEnv;
+
+ const user = users[1];
+
+ // Deposit with native ETH
+ await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize});
+
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero);
+ expect(aTokensBalance).to.be.gte(depositSize);
+ });
+
+ it('Withdraw WETH - Partial', async () => {
+ const {users, wethGateway, aWETH, pool} = testEnv;
+
+ const user = users[1];
+ const priorEthersBalance = await user.signer.getBalance();
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero, 'User should have aTokens.');
+
+ // Partially withdraw native ETH
+ const partialWithdraw = await convertToCurrencyDecimals(aWETH.address, '2');
+
+ // Approve the aTokens to Gateway so Gateway can withdraw and convert to Ether
+ const approveTx = await aWETH
+ .connect(user.signer)
+ .approve(wethGateway.address, MAX_UINT_AMOUNT);
+ const {gasUsed: approveGas} = await waitForTx(approveTx);
+
+ // Partial Withdraw and send native Ether to user
+ const {gasUsed: withdrawGas} = await waitForTx(
+ await wethGateway.connect(user.signer).withdrawETH(partialWithdraw, user.address)
+ );
+
+ const afterPartialEtherBalance = await user.signer.getBalance();
+ const afterPartialATokensBalance = await aWETH.balanceOf(user.address);
+ const gasCosts = approveGas.add(withdrawGas).mul(approveTx.gasPrice);
+
+ expect(afterPartialEtherBalance).to.be.equal(
+ priorEthersBalance.add(partialWithdraw).sub(gasCosts),
+ 'User ETHER balance should contain the partial withdraw'
+ );
+ expect(afterPartialATokensBalance).to.be.equal(
+ aTokensBalance.sub(partialWithdraw),
+ 'User aWETH balance should be substracted'
+ );
+ });
+
+ it('Withdraw WETH - Full', async () => {
+ const {users, aWETH, wethGateway, pool} = testEnv;
+
+ const user = users[1];
+ const priorEthersBalance = await user.signer.getBalance();
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero, 'User should have aTokens.');
+
+ // Approve the aTokens to Gateway so Gateway can withdraw and convert to Ether
+ const approveTx = await aWETH
+ .connect(user.signer)
+ .approve(wethGateway.address, MAX_UINT_AMOUNT);
+ const {gasUsed: approveGas} = await waitForTx(approveTx);
+
+ // Full withdraw
+ const {gasUsed: withdrawGas} = await waitForTx(
+ await wethGateway.connect(user.signer).withdrawETH(MAX_UINT_AMOUNT, user.address)
+ );
+
+ const afterFullEtherBalance = await user.signer.getBalance();
+ const afterFullATokensBalance = await aWETH.balanceOf(user.address);
+ const gasCosts = approveGas.add(withdrawGas).mul(approveTx.gasPrice);
+
+ expect(afterFullEtherBalance).to.be.eq(
+ priorEthersBalance.add(aTokensBalance).sub(gasCosts),
+ 'User ETHER balance should contain the full withdraw'
+ );
+ expect(afterFullATokensBalance).to.be.eq(0, 'User aWETH balance should be zero');
+ });
+
+ it('Borrow stable WETH and Full Repay with ETH', async () => {
+ const {users, wethGateway, aWETH, weth, pool, helpersContract} = testEnv;
+ const borrowSize = parseEther('1');
+ const repaySize = borrowSize.add(borrowSize.mul(5).div(100));
+ const user = users[1];
+
+ const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address);
+
+ const stableDebtToken = await getStableDebtToken(stableDebtTokenAddress);
+
+ // Deposit with native ETH
+ await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize});
+
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero);
+ expect(aTokensBalance).to.be.gte(depositSize);
+
+ // Borrow WETH with WETH as collateral
+ await waitForTx(
+ await pool.connect(user.signer).borrow(weth.address, borrowSize, '1', '0', user.address)
+ );
+
+ const debtBalance = await stableDebtToken.balanceOf(user.address);
+
+ expect(debtBalance).to.be.gt(zero);
+
+ // Full Repay WETH with native ETH
+ await waitForTx(
+ await wethGateway
+ .connect(user.signer)
+ .repayETH(MAX_UINT_AMOUNT, '1', user.address, {value: repaySize})
+ );
+
+ const debtBalanceAfterRepay = await stableDebtToken.balanceOf(user.address);
+ expect(debtBalanceAfterRepay).to.be.eq(zero);
+ });
+
+ it('Borrow variable WETH and Full Repay with ETH', async () => {
+ const {users, wethGateway, aWETH, weth, pool, helpersContract} = testEnv;
+ const borrowSize = parseEther('1');
+ const repaySize = borrowSize.add(borrowSize.mul(5).div(100));
+ const user = users[1];
+
+ const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(
+ weth.address
+ );
+
+ const varDebtToken = await getVariableDebtToken(variableDebtTokenAddress);
+
+ // Deposit with native ETH
+ await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize});
+
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero);
+ expect(aTokensBalance).to.be.gte(depositSize);
+
+ // Borrow WETH with WETH as collateral
+ await waitForTx(
+ await pool.connect(user.signer).borrow(weth.address, borrowSize, '2', '0', user.address)
+ );
+
+ const debtBalance = await varDebtToken.balanceOf(user.address);
+
+ expect(debtBalance).to.be.gt(zero);
+
+ // Partial Repay WETH loan with native ETH
+ const partialPayment = repaySize.div(2);
+ await waitForTx(
+ await wethGateway
+ .connect(user.signer)
+ .repayETH(partialPayment, '2', user.address, {value: partialPayment})
+ );
+
+ const debtBalanceAfterPartialRepay = await varDebtToken.balanceOf(user.address);
+ expect(debtBalanceAfterPartialRepay).to.be.lt(debtBalance);
+
+ // Full Repay WETH loan with native ETH
+ await waitForTx(
+ await wethGateway
+ .connect(user.signer)
+ .repayETH(MAX_UINT_AMOUNT, '2', user.address, {value: repaySize})
+ );
+ const debtBalanceAfterFullRepay = await varDebtToken.balanceOf(user.address);
+ expect(debtBalanceAfterFullRepay).to.be.eq(zero);
+ });
+
+ it('Borrow ETH via delegateApprove ETH and repays back', async () => {
+ const {users, wethGateway, aWETH, weth, helpersContract} = testEnv;
+ const borrowSize = parseEther('1');
+ const user = users[2];
+ const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(
+ weth.address
+ );
+ const varDebtToken = await getVariableDebtToken(variableDebtTokenAddress);
+
+ const priorDebtBalance = await varDebtToken.balanceOf(user.address);
+ expect(priorDebtBalance).to.be.eq(zero);
+
+ // Deposit WETH with native ETH
+ await wethGateway.connect(user.signer).depositETH(user.address, '0', {value: depositSize});
+
+ const aTokensBalance = await aWETH.balanceOf(user.address);
+
+ expect(aTokensBalance).to.be.gt(zero);
+ expect(aTokensBalance).to.be.gte(depositSize);
+
+ // Delegates borrowing power of WETH to WETHGateway
+ await waitForTx(
+ await varDebtToken.connect(user.signer).approveDelegation(wethGateway.address, borrowSize)
+ );
+
+ // Borrows ETH with WETH as collateral
+ await waitForTx(await wethGateway.connect(user.signer).borrowETH(borrowSize, '2', '0'));
+
+ const debtBalance = await varDebtToken.balanceOf(user.address);
+
+ expect(debtBalance).to.be.gt(zero);
+
+ // Full Repay WETH loan with native ETH
+ await waitForTx(
+ await wethGateway
+ .connect(user.signer)
+ .repayETH(MAX_UINT_AMOUNT, '2', user.address, {value: borrowSize.mul(2)})
+ );
+ const debtBalanceAfterFullRepay = await varDebtToken.balanceOf(user.address);
+ expect(debtBalanceAfterFullRepay).to.be.eq(zero);
+ });
+
+ it('Should revert if receiver function receives Ether if not WETH', async () => {
+ const {users, wethGateway} = testEnv;
+ const user = users[0];
+ const amount = parseEther('1');
+
+ // Call receiver function (empty data + value)
+ await expect(
+ user.signer.sendTransaction({
+ to: wethGateway.address,
+ value: amount,
+ gasLimit: DRE.network.config.gas,
+ })
+ ).to.be.revertedWith('Receive not allowed');
+ });
+
+ it('Should revert if fallback functions is called with Ether', async () => {
+ const {users, wethGateway} = testEnv;
+ const user = users[0];
+ const amount = parseEther('1');
+ const fakeABI = ['function wantToCallFallback()'];
+ const abiCoder = new DRE.ethers.utils.Interface(fakeABI);
+ const fakeMethodEncoded = abiCoder.encodeFunctionData('wantToCallFallback', []);
+
+ // Call fallback function with value
+ await expect(
+ user.signer.sendTransaction({
+ to: wethGateway.address,
+ data: fakeMethodEncoded,
+ value: amount,
+ gasLimit: DRE.network.config.gas,
+ })
+ ).to.be.revertedWith('Fallback not allowed');
+ });
+
+ it('Should revert if fallback functions is called', async () => {
+ const {users, wethGateway} = testEnv;
+ const user = users[0];
+
+ const fakeABI = ['function wantToCallFallback()'];
+ const abiCoder = new DRE.ethers.utils.Interface(fakeABI);
+ const fakeMethodEncoded = abiCoder.encodeFunctionData('wantToCallFallback', []);
+
+ // Call fallback function without value
+ await expect(
+ user.signer.sendTransaction({
+ to: wethGateway.address,
+ data: fakeMethodEncoded,
+ gasLimit: DRE.network.config.gas,
+ })
+ ).to.be.revertedWith('Fallback not allowed');
+ });
+
+ it('Getters should retrieve correct state', async () => {
+ const {aWETH, weth, pool, wethGateway} = testEnv;
+
+ const WETHAddress = await wethGateway.getWETHAddress();
+ const aWETHAddress = await wethGateway.getAWETHAddress();
+ const poolAddress = await wethGateway.getLendingPoolAddress();
+
+ expect(WETHAddress).to.be.equal(weth.address);
+ expect(aWETHAddress).to.be.equal(aWETH.address);
+ expect(poolAddress).to.be.equal(pool.address);
+ });
+
+ it('Owner can do emergency token recovery', async () => {
+ const {users, dai, wethGateway, deployer} = testEnv;
+ const user = users[0];
+ const amount = parseEther('1');
+
+ await dai.connect(user.signer).mint(amount);
+ const daiBalanceAfterMint = await dai.balanceOf(user.address);
+
+ await dai.connect(user.signer).transfer(wethGateway.address, amount);
+ const daiBalanceAfterBadTransfer = await dai.balanceOf(user.address);
+ expect(daiBalanceAfterBadTransfer).to.be.eq(
+ daiBalanceAfterMint.sub(amount),
+ 'User should have lost the funds here.'
+ );
+
+ await wethGateway
+ .connect(deployer.signer)
+ .emergencyTokenTransfer(dai.address, user.address, amount);
+ const daiBalanceAfterRecovery = await dai.balanceOf(user.address);
+
+ expect(daiBalanceAfterRecovery).to.be.eq(
+ daiBalanceAfterMint,
+ 'User should recover the funds due emergency token transfer'
+ );
+ });
+
+ it('Owner can do emergency native ETH recovery', async () => {
+ const {users, wethGateway, deployer} = testEnv;
+ const user = users[0];
+ const amount = parseEther('1');
+ const userBalancePriorCall = await user.signer.getBalance();
+
+ // Deploy contract with payable selfdestruct contract
+ const selfdestructContract = await deploySelfdestructTransferMock();
+
+ // Selfdestruct the mock, pointing to WETHGateway address
+ const callTx = await selfdestructContract
+ .connect(user.signer)
+ .destroyAndTransfer(wethGateway.address, {value: amount});
+ const {gasUsed} = await waitForTx(callTx);
+ const gasFees = gasUsed.mul(callTx.gasPrice);
+ const userBalanceAfterCall = await user.signer.getBalance();
+
+ expect(userBalanceAfterCall).to.be.eq(userBalancePriorCall.sub(amount).sub(gasFees), '');
+ 'User should have lost the funds';
+
+ // Recover the funds from the contract and sends back to the user
+ await wethGateway.connect(deployer.signer).emergencyEtherTransfer(user.address, amount);
+
+ const userBalanceAfterRecovery = await user.signer.getBalance();
+ const wethGatewayAfterRecovery = await DRE.ethers.provider.getBalance(wethGateway.address);
+
+ expect(userBalanceAfterRecovery).to.be.eq(
+ userBalancePriorCall.sub(gasFees),
+ 'User should recover the funds due emergency eth transfer.'
+ );
+ expect(wethGatewayAfterRecovery).to.be.eq('0', 'WETHGateway ether balance should be zero.');
+ });
+});
diff --git a/tsconfig.json b/tsconfig.json
index edf9e693..e6a15a81 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,16 +1,14 @@
{
"compilerOptions": {
- "target": "ES2019",
+ "target": "es2019",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
- "outDir": "dist",
- "resolveJsonModule": true,
- "downlevelIteration": true
+ "outDir": "dist"
},
- "include": ["./**/*"],
+ "include": ["./scripts", "./test"],
"files": [
- "./buidler.config.ts",
+ "./hardhat.config.ts",
"node_modules/@nomiclabs/buidler-ethers/src/type-extensions.d.ts",
"node_modules/buidler-typechain/src/type-extensions.d.ts",
"node_modules/@nomiclabs/buidler-waffle/src/type-extensions.d.ts",