@ninerealms/midgard-client
Version:
167 lines • 32.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.historyLiquidityChanges = exports.rawToHistoryLiquidityChanges = exports.rawToHistoryLiquidityChangesInterval = exports.historyTVL = exports.rawToHistoryTVL = exports.rawToHistoryIntervalTVL = exports.historyDepthsPoolsMany = exports.historyDepths = exports.convertHistoryDepthInterval = exports.historyEarnings = exports.historySwap = exports.rawToHistorySwap = exports.rawToHistoryIntervalSwap = exports.convertIntervalPool = exports.flattenHistoryEarningsIntervals = void 0;
const utils_1 = require("./utils");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const flattenHistoryEarningsIntervals = (earnings) => (earnings.intervals.reduce((memo, { pools, startTime, endTime, runePriceUSD, }) => memo.concat(pools.map((pool) => ({
...pool,
startTime,
endTime,
runePriceUSD,
}))), []));
exports.flattenHistoryEarningsIntervals = flattenHistoryEarningsIntervals;
const convertMetaTypes = (meta) => ({
...meta,
...utils_1.rawToInterval(meta),
liquidityFees: utils_1.toBigNumber(meta.liquidityFees),
blockRewards: utils_1.toBigNumber(meta.blockRewards),
earnings: utils_1.toBigNumber(meta.earnings),
bondingEarnings: utils_1.toBigNumber(meta.bondingEarnings),
liquidityEarnings: utils_1.toBigNumber(meta.liquidityEarnings),
avgNodeCount: utils_1.toBigNumber(meta.avgNodeCount),
runePriceUSD: utils_1.toBigNumber(meta.runePriceUSD),
});
const convertIntervalPool = (intervalPool) => ({
...intervalPool,
...utils_1.rawToInterval(intervalPool),
pool: intervalPool.pool,
assetLiquidityFees: utils_1.toBigNumber(intervalPool.assetLiquidityFees),
runeLiquidityFees: utils_1.toBigNumber(intervalPool.runeLiquidityFees),
totalLiquidityFeesRune: utils_1.toBigNumber(intervalPool.totalLiquidityFeesRune),
rewards: utils_1.toBigNumber(intervalPool.rewards),
earnings: utils_1.toBigNumber(intervalPool.earnings),
});
exports.convertIntervalPool = convertIntervalPool;
const rawToHistoryIntervalSwap = (res) => ({
...res,
...utils_1.rawToInterval(res),
toAssetCount: utils_1.toBigNumber(res.toAssetCount),
toRuneCount: utils_1.toBigNumber(res.toRuneCount),
totalCount: utils_1.toBigNumber(res.totalCount),
toAssetVolume: utils_1.toBigNumber(res.toAssetVolume),
toRuneVolume: utils_1.toBigNumber(res.toRuneVolume),
totalVolume: utils_1.toBigNumber(res.totalVolume),
toAssetFees: utils_1.toBigNumber(res.toAssetFees),
toRuneFees: utils_1.toBigNumber(res.toRuneFees),
totalFees: utils_1.toBigNumber(res.totalFees),
toAssetAverageSlip: utils_1.toBigNumber(res.toAssetAverageSlip),
toRuneAverageSlip: utils_1.toBigNumber(res.toRuneAverageSlip),
averageSlip: utils_1.toBigNumber(res.averageSlip),
runePriceUSD: utils_1.toBigNumber(res.runePriceUSD),
});
exports.rawToHistoryIntervalSwap = rawToHistoryIntervalSwap;
const rawToHistorySwap = (res) => ({
meta: {
...res.meta,
...exports.rawToHistoryIntervalSwap(res.meta),
},
intervals: res.intervals.map(exports.rawToHistoryIntervalSwap),
});
exports.rawToHistorySwap = rawToHistorySwap;
const historySwap = async ({ pool, ...options }) => (utils_1.fetch({
path: '/v2/history/swaps',
body: options,
}).then(exports.rawToHistorySwap));
exports.historySwap = historySwap;
const historyEarnings = async (options) => (utils_1.fetch({
path: '/v2/history/earnings',
body: options,
}).then(response => ({
...response,
meta: {
...response.meta,
...convertMetaTypes(response.meta),
},
intervals: response.intervals.map(interval => ({
...interval,
...convertMetaTypes(interval),
pools: interval.pools.map(exports.convertIntervalPool),
}))
})));
exports.historyEarnings = historyEarnings;
const convertHistoryDepthInterval = (interval) => ({
...interval,
...utils_1.rawToInterval(interval),
assetDepth: utils_1.toBigNumber(interval.assetDepth),
runeDepth: utils_1.toBigNumber(interval.runeDepth),
assetPrice: utils_1.toBigNumber(interval.assetPrice),
assetPriceUSD: utils_1.toBigNumber(interval.assetPriceUSD),
liquidityUnits: utils_1.toBigNumber(interval.liquidityUnits),
synthUnits: utils_1.toBigNumber(interval.synthUnits),
synthSupply: utils_1.toBigNumber(interval.synthSupply),
units: utils_1.toBigNumber(interval.units),
});
exports.convertHistoryDepthInterval = convertHistoryDepthInterval;
const historyDepths = async ({ pool, ...options }) => {
return utils_1.fetch({
path: `/v2/history/depths/${pool}`,
body: options,
}).then(depths => ({
...depths,
meta: {
...depths.meta,
pool,
},
intervals: depths.intervals.map((interval) => ({
...interval,
...exports.convertHistoryDepthInterval(interval),
})),
}));
};
exports.historyDepths = historyDepths;
const historyDepthsPoolsMany = (pools) => (Promise.all(pools.map(exports.historyDepths)));
exports.historyDepthsPoolsMany = historyDepthsPoolsMany;
const rawToHistoryIntervalTVL = (tvlInterval) => ({
...utils_1.rawToInterval(tvlInterval),
totalValuePooled: utils_1.toBigNumber(tvlInterval.totalValuePooled),
totalValueBonded: utils_1.toBigNumber(tvlInterval.totalValueBonded),
totalValueLocked: utils_1.toBigNumber(tvlInterval.totalValueLocked),
runePriceUSD: utils_1.toBigNumber(tvlInterval.runePriceUSD),
});
exports.rawToHistoryIntervalTVL = rawToHistoryIntervalTVL;
const rawToHistoryTVL = (tvl) => ({
meta: {
...tvl,
...exports.rawToHistoryIntervalTVL(tvl.meta),
},
intervals: tvl.intervals.map(exports.rawToHistoryIntervalTVL),
});
exports.rawToHistoryTVL = rawToHistoryTVL;
const historyTVL = (interval) => (utils_1.fetch({
path: '/v2/history/tvl',
body: interval,
}).then(exports.rawToHistoryTVL));
exports.historyTVL = historyTVL;
const rawToHistoryLiquidityChangesInterval = (changes) => ({
addAssetLiquidityVolume: new bignumber_js_1.default(changes.addAssetLiquidityVolume),
addRuneLiquidityVolume: new bignumber_js_1.default(changes.addRuneLiquidityVolume),
addLiquidityVolume: new bignumber_js_1.default(changes.addLiquidityVolume),
addLiquidityCount: new bignumber_js_1.default(changes.addLiquidityCount),
withdrawAssetVolume: new bignumber_js_1.default(changes.withdrawAssetVolume),
withdrawRuneVolume: new bignumber_js_1.default(changes.withdrawRuneVolume),
impermanentLossProtectionPaid: new bignumber_js_1.default(changes.impermanentLossProtectionPaid),
withdrawVolume: new bignumber_js_1.default(changes.withdrawVolume),
withdrawCount: new bignumber_js_1.default(changes.withdrawCount),
net: new bignumber_js_1.default(changes.net),
runePriceUSD: new bignumber_js_1.default(changes.runePriceUSD),
...utils_1.rawToInterval(changes),
});
exports.rawToHistoryLiquidityChangesInterval = rawToHistoryLiquidityChangesInterval;
const rawToHistoryLiquidityChanges = (changes) => ({
...changes,
meta: {
...changes.meta,
...exports.rawToHistoryLiquidityChangesInterval(changes.meta),
},
intervals: changes.intervals.map(exports.rawToHistoryLiquidityChangesInterval),
});
exports.rawToHistoryLiquidityChanges = rawToHistoryLiquidityChanges;
const historyLiquidityChanges = (options) => (utils_1.fetch({
path: '/v2/history/liquidity_changes',
body: options,
}).then(exports.rawToHistoryLiquidityChanges));
exports.historyLiquidityChanges = historyLiquidityChanges;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQVNnQjtBQUNoQixnRUFBb0M7QUFpSjdCLE1BQU0sK0JBQStCLEdBQUcsQ0FDN0MsUUFBeUIsRUFDVSxFQUFFLENBQUMsQ0FDdEMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDeEIsSUFBdUMsRUFDdkMsRUFDRSxLQUFLLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEdBQ2IsRUFDRCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxHQUFHLElBQUk7SUFDUCxTQUFTO0lBQ1QsT0FBTztJQUNQLFlBQVk7Q0FDYixDQUFDLENBQUMsQ0FDSixFQUFFLEVBQUUsQ0FBQyxDQUNQLENBQUE7QUFuQlksUUFBQSwrQkFBK0IsbUNBbUIzQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsSUFBa0MsRUFDWixFQUFFLENBQUMsQ0FBQztJQUMxQixHQUFHLElBQUk7SUFDUCxHQUFHLHFCQUFhLENBQUMsSUFBSSxDQUFDO0lBQ3RCLGFBQWEsRUFBRSxtQkFBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUMsWUFBWSxFQUFFLG1CQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM1QyxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3BDLGVBQWUsRUFBRSxtQkFBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDbEQsaUJBQWlCLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdEQsWUFBWSxFQUFFLG1CQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM1QyxZQUFZLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0NBQzdDLENBQUMsQ0FBQTtBQUVLLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsWUFBaUQsRUFDcEIsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxZQUFZO0lBQ2YsR0FBRyxxQkFBYSxDQUFDLFlBQVksQ0FBQztJQUM5QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7SUFDdkIsa0JBQWtCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDaEUsaUJBQWlCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7SUFDOUQsc0JBQXNCLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUM7SUFDeEUsT0FBTyxFQUFFLG1CQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUMxQyxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0NBQzdDLENBQUMsQ0FBQTtBQVhXLFFBQUEsbUJBQW1CLHVCQVc5QjtBQVlLLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsR0FBb0MsRUFDWCxFQUFFLENBQUMsQ0FBQztJQUM3QixHQUFHLEdBQUc7SUFDTixHQUFHLHFCQUFhLENBQUMsR0FBRyxDQUFDO0lBQ3JCLFlBQVksRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDM0MsV0FBVyxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUN6QyxVQUFVLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLGFBQWEsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDN0MsWUFBWSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUMzQyxXQUFXLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ3pDLFdBQVcsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDekMsVUFBVSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxTQUFTLEVBQUUsbUJBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3JDLGtCQUFrQixFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBQ3ZELGlCQUFpQixFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQ3JELFdBQVcsRUFBRSxtQkFBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDekMsWUFBWSxFQUFFLG1CQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztDQUM1QyxDQUFDLENBQUE7QUFsQlcsUUFBQSx3QkFBd0IsNEJBa0JuQztBQUVLLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUE0QixFQUFtQixFQUFFLENBQUMsQ0FBQztJQUNsRixJQUFJLEVBQUU7UUFDSixHQUFHLEdBQUcsQ0FBQyxJQUFJO1FBQ1gsR0FBRyxnQ0FBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0tBQ3RDO0lBQ0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdDQUF3QixDQUFDO0NBQ3ZELENBQUMsQ0FBQTtBQU5XLFFBQUEsZ0JBQWdCLG9CQU0zQjtBQUVLLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDOUIsRUFDRSxJQUFJLEVBQ0osR0FBRyxPQUFPLEVBQ2dCLEVBQzVCLEVBQUUsQ0FBQyxDQUNILGFBQUssQ0FBMEI7SUFDN0IsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixJQUFJLEVBQUUsT0FBTztDQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQWdCLENBQUMsQ0FDMUIsQ0FBQTtBQVZZLFFBQUEsV0FBVyxlQVV2QjtBQUVNLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDbEMsT0FBK0IsRUFDL0IsRUFBRSxDQUFDLENBQ0gsYUFBSyxDQUEwQjtJQUM3QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLElBQUksRUFBRSxPQUFpQjtDQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQixHQUFHLFFBQVE7SUFDWCxJQUFJLEVBQUU7UUFDSixHQUFHLFFBQVEsQ0FBQyxJQUFJO1FBQ2hCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztLQUNuQztJQUNELFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsR0FBRyxRQUFRO1FBQ1gsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDN0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDJCQUFtQixDQUFDO0tBQy9DLENBQUMsQ0FBQztDQUNKLENBQUMsQ0FBQyxDQUNKLENBQUE7QUFsQlksUUFBQSxlQUFlLG1CQWtCM0I7QUFFTSxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLFFBQXNDLEVBQ2hCLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsUUFBUTtJQUNYLEdBQUcscUJBQWEsQ0FBQyxRQUFRLENBQUM7SUFDMUIsVUFBVSxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxTQUFTLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzFDLFVBQVUsRUFBRSxtQkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDNUMsYUFBYSxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNsRCxjQUFjLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQ3BELFVBQVUsRUFBRSxtQkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDNUMsV0FBVyxFQUFFLG1CQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUM5QyxLQUFLLEVBQUUsbUJBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ25DLENBQUMsQ0FBQTtBQWJXLFFBQUEsMkJBQTJCLCtCQWF0QztBQUVLLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxFQUNsQyxJQUFJLEVBQ0osR0FBRyxPQUFPLEVBQ2dCLEVBQXlCLEVBQUU7SUFDckQsT0FBTyxhQUFLLENBQXVCO1FBQ2pDLElBQUksRUFBRSxzQkFBc0IsSUFBSSxFQUFFO1FBQ2xDLElBQUksRUFBRSxPQUFpQjtLQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixHQUFHLE1BQU07UUFDVCxJQUFJLEVBQUU7WUFDSixHQUFHLE1BQU0sQ0FBQyxJQUFJO1lBQ2QsSUFBSTtTQUNMO1FBQ0QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsUUFBUTtZQUNYLEdBQUcsbUNBQTJCLENBQUMsUUFBUSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFBO0FBbEJZLFFBQUEsYUFBYSxpQkFrQnpCO0FBRU0sTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxLQUFrQyxFQUNsQyxFQUFFLENBQUMsQ0FDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQWEsQ0FBQyxDQUFDLENBQ3RDLENBQUE7QUFKWSxRQUFBLHNCQUFzQiwwQkFJbEM7QUEwQk0sTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFdBQXVDLEVBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLEdBQUcscUJBQWEsQ0FBQyxXQUFXLENBQUM7SUFDN0IsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsZ0JBQWdCLEVBQUUsbUJBQVcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsWUFBWSxFQUFFLG1CQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztDQUNwRCxDQUFDLENBQUE7QUFOVyxRQUFBLHVCQUF1QiwyQkFNbEM7QUFFSyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQXVCLEVBQWMsRUFBRSxDQUFDLENBQUM7SUFDdkUsSUFBSSxFQUFFO1FBQ0osR0FBRyxHQUFHO1FBQ04sR0FBRywrQkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0tBQ3JDO0lBQ0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUF1QixDQUFDO0NBQ3RELENBQUMsQ0FBQTtBQU5XLFFBQUEsZUFBZSxtQkFNMUI7QUFFSyxNQUFNLFVBQVUsR0FBRyxDQUN4QixRQUF5QixFQUNKLEVBQUUsQ0FBQyxDQUN4QixhQUFLLENBQXFCO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsSUFBSSxFQUFFLFFBQVE7Q0FDZixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUFlLENBQUMsQ0FDekIsQ0FBQTtBQVBZLFFBQUEsVUFBVSxjQU90QjtBQXdDTSxNQUFNLG9DQUFvQyxHQUFHLENBQ2xELE9BQWdELEVBQ2YsRUFBRSxDQUFDLENBQUM7SUFDckMsdUJBQXVCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztJQUN2RSxzQkFBc0IsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0lBQ3JFLGtCQUFrQixFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsaUJBQWlCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUMzRCxtQkFBbUIsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0lBQy9ELGtCQUFrQixFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsNkJBQTZCLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztJQUNuRixjQUFjLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDckQsYUFBYSxFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ25ELEdBQUcsRUFBRSxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMvQixZQUFZLEVBQUUsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDakQsR0FBRyxxQkFBYSxDQUFDLE9BQU8sQ0FBQztDQUMxQixDQUFDLENBQUE7QUFmVyxRQUFBLG9DQUFvQyx3Q0FlL0M7QUFFSyxNQUFNLDRCQUE0QixHQUFHLENBQzFDLE9BQXdDLEVBQ2YsRUFBRSxDQUFDLENBQUM7SUFDN0IsR0FBRyxPQUFPO0lBQ1YsSUFBSSxFQUFFO1FBQ0osR0FBRyxPQUFPLENBQUMsSUFBSTtRQUNmLEdBQUcsNENBQW9DLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztLQUN0RDtJQUNELFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0Q0FBb0MsQ0FBQztDQUN2RSxDQUFDLENBQUE7QUFUVyxRQUFBLDRCQUE0QixnQ0FTdkM7QUFFSyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLE9BQWdDLEVBQ0UsRUFBRSxDQUFDLENBQ3JDLGFBQUssQ0FBa0M7SUFDckMsSUFBSSxFQUFFLCtCQUErQjtJQUNyQyxJQUFJLEVBQUUsT0FBTztDQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsb0NBQTRCLENBQUMsQ0FDdEMsQ0FBQTtBQVBZLFFBQUEsdUJBQXVCLDJCQU9uQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEludGVydmFsUmVzcG9uc2UsXG4gIGZldGNoLFxuICB0b0RhdGUsXG4gIHRvQmlnTnVtYmVyLFxuICBJbnRlcnZhbEtleSxcbiAgSW50ZXJ2YWwsXG4gIEludGVydmFsUmVxdWVzdCxcbiAgcmF3VG9JbnRlcnZhbCxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcEludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgdG9Bc3NldENvdW50OiBzdHJpbmc7XG4gIHRvUnVuZUNvdW50OiBzdHJpbmc7XG4gIHRvdGFsQ291bnQ6IHN0cmluZztcbiAgdG9Bc3NldFZvbHVtZTogc3RyaW5nO1xuICB0b1J1bmVWb2x1bWU6IHN0cmluZztcbiAgdG90YWxWb2x1bWU6IHN0cmluZztcbiAgdG9Bc3NldEZlZXM6IHN0cmluZztcbiAgdG9SdW5lRmVlczogc3RyaW5nO1xuICB0b3RhbEZlZXM6IHN0cmluZztcbiAgdG9Bc3NldEF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIHRvUnVuZUF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIGF2ZXJhZ2VTbGlwOiBzdHJpbmc7XG4gIHJ1bmVQcmljZVVTRDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICB0b0Fzc2V0Q291bnQ6IEJpZ051bWJlcjtcbiAgdG9SdW5lQ291bnQ6IEJpZ051bWJlcjtcbiAgdG90YWxDb3VudDogQmlnTnVtYmVyO1xuICB0b0Fzc2V0Vm9sdW1lOiBCaWdOdW1iZXI7XG4gIHRvUnVuZVZvbHVtZTogQmlnTnVtYmVyO1xuICB0b3RhbFZvbHVtZTogQmlnTnVtYmVyO1xuICB0b0Fzc2V0RmVlczogQmlnTnVtYmVyO1xuICB0b1J1bmVGZWVzOiBCaWdOdW1iZXI7XG4gIHRvdGFsRmVlczogQmlnTnVtYmVyO1xuICB0b0Fzc2V0QXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgdG9SdW5lQXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgYXZlcmFnZVNsaXA6IEJpZ051bWJlcjtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeURlcHRoSW50ZXJ2YWxSZXNwb25zZSBleHRlbmRzIEludGVydmFsUmVzcG9uc2Uge1xuICBhc3NldERlcHRoOiBzdHJpbmc7XG4gIHJ1bmVEZXB0aDogc3RyaW5nO1xuICBhc3NldFByaWNlOiBzdHJpbmc7XG4gIGFzc2V0UHJpY2VVU0Q6IHN0cmluZztcbiAgbGlxdWlkaXR5VW5pdHM6IHN0cmluZztcbiAgc3ludGhVbml0czogc3RyaW5nO1xuICBzeW50aFN1cHBseTogc3RyaW5nO1xuICB1bml0czogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlEZXB0aEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBhc3NldERlcHRoOiBCaWdOdW1iZXI7XG4gIHJ1bmVEZXB0aDogQmlnTnVtYmVyO1xuICBhc3NldFByaWNlOiBCaWdOdW1iZXI7XG4gIGFzc2V0UHJpY2VVU0Q6IEJpZ051bWJlcjtcbiAgbGlxdWlkaXR5VW5pdHM6IEJpZ051bWJlcjtcbiAgc3ludGhVbml0czogQmlnTnVtYmVyO1xuICBzeW50aFN1cHBseTogQmlnTnVtYmVyO1xuICB1bml0czogQmlnTnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlEZXB0aFJlc3BvbnNlIHtcbiAgbWV0YTogSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5RGVwdGhJbnRlcnZhbFJlc3BvbnNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJ2YWxSZXF1ZXN0V2l0aFBvb2wgZXh0ZW5kcyBJbnRlcnZhbFJlcXVlc3Qge1xuICBwb29sOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJ2YWxSZXNwb25zZVdpdGhQb29sIGV4dGVuZHMgSW50ZXJ2YWxSZXNwb25zZSB7XG4gIHBvb2w6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RGVwdGgge1xuICBtZXRhOiBJbnRlcnZhbFJlc3BvbnNlV2l0aFBvb2w7XG4gIGludGVydmFsczogSGlzdG9yeURlcHRoSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5UmVxdWVzdE9wdGlvbnMge1xuICBpbnRlcnZhbD86IEludGVydmFsS2V5O1xuICBjb3VudD86IG51bWJlcjtcbiAgdG8/OiBudW1iZXI7XG4gIGZyb20/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVBvb2xSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIEhpc3RvcnlSZXF1ZXN0T3B0aW9ucyB7XG4gIHBvb2w6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcnZhbFJlc3BvbnNlV2l0aEVhcm5pbmdzIGV4dGVuZHMgSW50ZXJ2YWxSZXNwb25zZSB7XG4gIGxpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgYmxvY2tSZXdhcmRzOiBzdHJpbmc7XG4gIGVhcm5pbmdzOiBzdHJpbmc7XG4gIGJvbmRpbmdFYXJuaW5nczogc3RyaW5nO1xuICBsaXF1aWRpdHlFYXJuaW5nczogc3RyaW5nO1xuICBhdmdOb2RlQ291bnQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgcG9vbDogc3RyaW5nO1xuICBhc3NldExpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgcnVuZUxpcXVpZGl0eUZlZXM6IHN0cmluZztcbiAgdG90YWxMaXF1aWRpdHlGZWVzUnVuZTogc3RyaW5nO1xuICByZXdhcmRzOiBzdHJpbmc7XG4gIGVhcm5pbmdzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBwb29sOiBzdHJpbmc7XG4gIGFzc2V0TGlxdWlkaXR5RmVlczogQmlnTnVtYmVyO1xuICBydW5lTGlxdWlkaXR5RmVlczogQmlnTnVtYmVyO1xuICB0b3RhbExpcXVpZGl0eUZlZXNSdW5lOiBCaWdOdW1iZXI7XG4gIHJld2FyZHM6IEJpZ051bWJlcjtcbiAgZWFybmluZ3M6IEJpZ051bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0IGV4dGVuZHMgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sIHtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxSZXNwb25zZSBleHRlbmRzIEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3Mge1xuICBwb29sczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sUmVzcG9uc2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5RWFybmluZ3NSZXNwb25zZSB7XG4gIG1ldGE6IEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3M7XG4gIGludGVydmFsczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxSZXNwb25zZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVydmFsV2l0aEVhcm5pbmdzIGV4dGVuZHMgSW50ZXJ2YWwge1xuICBsaXF1aWRpdHlGZWVzOiBCaWdOdW1iZXI7XG4gIGJsb2NrUmV3YXJkczogQmlnTnVtYmVyO1xuICBlYXJuaW5nczogQmlnTnVtYmVyO1xuICBib25kaW5nRWFybmluZ3M6IEJpZ051bWJlcjtcbiAgbGlxdWlkaXR5RWFybmluZ3M6IEJpZ051bWJlcjtcbiAgYXZnTm9kZUNvdW50OiBCaWdOdW1iZXI7XG4gIHJ1bmVQcmljZVVTRDogQmlnTnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFYXJuaW5nc0ludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWxXaXRoRWFybmluZ3Mge1xuICBwb29sczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxQb29sW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVhcm5pbmdzIHtcbiAgbWV0YTogSW50ZXJ2YWxXaXRoRWFybmluZ3M7XG4gIGludGVydmFsczogSGlzdG9yeUVhcm5pbmdzSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5IaXN0b3J5RWFybmluZ3NJbnRlcnZhbHMgPSAoXG4gIGVhcm5pbmdzOiBIaXN0b3J5RWFybmluZ3MsXG4pOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0W10gPT4gKFxuICBlYXJuaW5ncy5pbnRlcnZhbHMucmVkdWNlKChcbiAgICBtZW1vOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xGbGF0W10sXG4gICAge1xuICAgICAgcG9vbHMsXG4gICAgICBzdGFydFRpbWUsXG4gICAgICBlbmRUaW1lLFxuICAgICAgcnVuZVByaWNlVVNELFxuICAgIH0sXG4gICkgPT4gbWVtby5jb25jYXQoXG4gICAgcG9vbHMubWFwKChwb29sOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2wpID0+ICh7XG4gICAgICAuLi5wb29sLFxuICAgICAgc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZSxcbiAgICAgIHJ1bmVQcmljZVVTRCxcbiAgICB9KSlcbiAgKSwgW10pXG4pXG5cbmNvbnN0IGNvbnZlcnRNZXRhVHlwZXMgPSAoXG4gIG1ldGE6IEludGVydmFsUmVzcG9uc2VXaXRoRWFybmluZ3MsXG4pOiBJbnRlcnZhbFdpdGhFYXJuaW5ncyA9PiAoe1xuICAuLi5tZXRhLFxuICAuLi5yYXdUb0ludGVydmFsKG1ldGEpLFxuICBsaXF1aWRpdHlGZWVzOiB0b0JpZ051bWJlcihtZXRhLmxpcXVpZGl0eUZlZXMpLFxuICBibG9ja1Jld2FyZHM6IHRvQmlnTnVtYmVyKG1ldGEuYmxvY2tSZXdhcmRzKSxcbiAgZWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEuZWFybmluZ3MpLFxuICBib25kaW5nRWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEuYm9uZGluZ0Vhcm5pbmdzKSxcbiAgbGlxdWlkaXR5RWFybmluZ3M6IHRvQmlnTnVtYmVyKG1ldGEubGlxdWlkaXR5RWFybmluZ3MpLFxuICBhdmdOb2RlQ291bnQ6IHRvQmlnTnVtYmVyKG1ldGEuYXZnTm9kZUNvdW50KSxcbiAgcnVuZVByaWNlVVNEOiB0b0JpZ051bWJlcihtZXRhLnJ1bmVQcmljZVVTRCksXG59KVxuXG5leHBvcnQgY29uc3QgY29udmVydEludGVydmFsUG9vbCA9IChcbiAgaW50ZXJ2YWxQb29sOiBIaXN0b3J5RWFybmluZ3NJbnRlcnZhbFBvb2xSZXNwb25zZSxcbik6IEhpc3RvcnlFYXJuaW5nc0ludGVydmFsUG9vbCA9PiAoe1xuICAuLi5pbnRlcnZhbFBvb2wsXG4gIC4uLnJhd1RvSW50ZXJ2YWwoaW50ZXJ2YWxQb29sKSxcbiAgcG9vbDogaW50ZXJ2YWxQb29sLnBvb2wsXG4gIGFzc2V0TGlxdWlkaXR5RmVlczogdG9CaWdOdW1iZXIoaW50ZXJ2YWxQb29sLmFzc2V0TGlxdWlkaXR5RmVlcyksXG4gIHJ1bmVMaXF1aWRpdHlGZWVzOiB0b0JpZ051bWJlcihpbnRlcnZhbFBvb2wucnVuZUxpcXVpZGl0eUZlZXMpLFxuICB0b3RhbExpcXVpZGl0eUZlZXNSdW5lOiB0b0JpZ051bWJlcihpbnRlcnZhbFBvb2wudG90YWxMaXF1aWRpdHlGZWVzUnVuZSksXG4gIHJld2FyZHM6IHRvQmlnTnVtYmVyKGludGVydmFsUG9vbC5yZXdhcmRzKSxcbiAgZWFybmluZ3M6IHRvQmlnTnVtYmVyKGludGVydmFsUG9vbC5lYXJuaW5ncyksXG59KVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlQb29sU3dhcFJlc3BvbnNlIHtcbiAgbWV0YTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5UG9vbFN3YXBJbnRlcnZhbFJlc3BvbnNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVBvb2xTd2FwIHtcbiAgbWV0YTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWxbXTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhd1RvSGlzdG9yeUludGVydmFsU3dhcCA9IChcbiAgcmVzOiBIaXN0b3J5UG9vbFN3YXBJbnRlcnZhbFJlc3BvbnNlLFxuKTogSGlzdG9yeVBvb2xTd2FwSW50ZXJ2YWwgPT4gKHtcbiAgLi4ucmVzLFxuICAuLi5yYXdUb0ludGVydmFsKHJlcyksXG4gIHRvQXNzZXRDb3VudDogdG9CaWdOdW1iZXIocmVzLnRvQXNzZXRDb3VudCksXG4gIHRvUnVuZUNvdW50OiB0b0JpZ051bWJlcihyZXMudG9SdW5lQ291bnQpLFxuICB0b3RhbENvdW50OiB0b0JpZ051bWJlcihyZXMudG90YWxDb3VudCksXG4gIHRvQXNzZXRWb2x1bWU6IHRvQmlnTnVtYmVyKHJlcy50b0Fzc2V0Vm9sdW1lKSxcbiAgdG9SdW5lVm9sdW1lOiB0b0JpZ051bWJlcihyZXMudG9SdW5lVm9sdW1lKSxcbiAgdG90YWxWb2x1bWU6IHRvQmlnTnVtYmVyKHJlcy50b3RhbFZvbHVtZSksXG4gIHRvQXNzZXRGZWVzOiB0b0JpZ051bWJlcihyZXMudG9Bc3NldEZlZXMpLFxuICB0b1J1bmVGZWVzOiB0b0JpZ051bWJlcihyZXMudG9SdW5lRmVlcyksXG4gIHRvdGFsRmVlczogdG9CaWdOdW1iZXIocmVzLnRvdGFsRmVlcyksXG4gIHRvQXNzZXRBdmVyYWdlU2xpcDogdG9CaWdOdW1iZXIocmVzLnRvQXNzZXRBdmVyYWdlU2xpcCksXG4gIHRvUnVuZUF2ZXJhZ2VTbGlwOiB0b0JpZ051bWJlcihyZXMudG9SdW5lQXZlcmFnZVNsaXApLFxuICBhdmVyYWdlU2xpcDogdG9CaWdOdW1iZXIocmVzLmF2ZXJhZ2VTbGlwKSxcbiAgcnVuZVByaWNlVVNEOiB0b0JpZ051bWJlcihyZXMucnVuZVByaWNlVVNEKSxcbn0pXG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlTd2FwID0gKHJlczogSGlzdG9yeVBvb2xTd2FwUmVzcG9uc2UpOiBIaXN0b3J5UG9vbFN3YXAgPT4gKHtcbiAgbWV0YToge1xuICAgIC4uLnJlcy5tZXRhLFxuICAgIC4uLnJhd1RvSGlzdG9yeUludGVydmFsU3dhcChyZXMubWV0YSksXG4gIH0sXG4gIGludGVydmFsczogcmVzLmludGVydmFscy5tYXAocmF3VG9IaXN0b3J5SW50ZXJ2YWxTd2FwKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5U3dhcCA9IGFzeW5jIChcbiAge1xuICAgIHBvb2wsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBIaXN0b3J5UG9vbFJlcXVlc3RPcHRpb25zLFxuKSA9PiAoXG4gIGZldGNoPEhpc3RvcnlQb29sU3dhcFJlc3BvbnNlPih7XG4gICAgcGF0aDogJy92Mi9oaXN0b3J5L3N3YXBzJyxcbiAgICBib2R5OiBvcHRpb25zLFxuICB9KS50aGVuKHJhd1RvSGlzdG9yeVN3YXApXG4pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5RWFybmluZ3MgPSBhc3luYyAoXG4gIG9wdGlvbnM/OiBIaXN0b3J5UmVxdWVzdE9wdGlvbnMsXG4pID0+IChcbiAgZmV0Y2g8SGlzdG9yeUVhcm5pbmdzUmVzcG9uc2U+KHtcbiAgICBwYXRoOiAnL3YyL2hpc3RvcnkvZWFybmluZ3MnLFxuICAgIGJvZHk6IG9wdGlvbnMgYXMgb2JqZWN0LFxuICB9KS50aGVuKHJlc3BvbnNlID0+ICh7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgbWV0YToge1xuICAgICAgLi4ucmVzcG9uc2UubWV0YSxcbiAgICAgIC4uLmNvbnZlcnRNZXRhVHlwZXMocmVzcG9uc2UubWV0YSksXG4gICAgfSxcbiAgICBpbnRlcnZhbHM6IHJlc3BvbnNlLmludGVydmFscy5tYXAoaW50ZXJ2YWwgPT4gKHtcbiAgICAgIC4uLmludGVydmFsLFxuICAgICAgLi4uY29udmVydE1ldGFUeXBlcyhpbnRlcnZhbCksXG4gICAgICBwb29sczogaW50ZXJ2YWwucG9vbHMubWFwKGNvbnZlcnRJbnRlcnZhbFBvb2wpLFxuICAgIH0pKVxuICB9KSlcbilcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRIaXN0b3J5RGVwdGhJbnRlcnZhbCA9IChcbiAgaW50ZXJ2YWw6IEhpc3RvcnlEZXB0aEludGVydmFsUmVzcG9uc2UsXG4pOiBIaXN0b3J5RGVwdGhJbnRlcnZhbCA9PiAoe1xuICAuLi5pbnRlcnZhbCxcbiAgLi4ucmF3VG9JbnRlcnZhbChpbnRlcnZhbCksXG4gIGFzc2V0RGVwdGg6IHRvQmlnTnVtYmVyKGludGVydmFsLmFzc2V0RGVwdGgpLFxuICBydW5lRGVwdGg6IHRvQmlnTnVtYmVyKGludGVydmFsLnJ1bmVEZXB0aCksXG4gIGFzc2V0UHJpY2U6IHRvQmlnTnVtYmVyKGludGVydmFsLmFzc2V0UHJpY2UpLFxuICBhc3NldFByaWNlVVNEOiB0b0JpZ051bWJlcihpbnRlcnZhbC5hc3NldFByaWNlVVNEKSxcbiAgbGlxdWlkaXR5VW5pdHM6IHRvQmlnTnVtYmVyKGludGVydmFsLmxpcXVpZGl0eVVuaXRzKSxcbiAgc3ludGhVbml0czogdG9CaWdOdW1iZXIoaW50ZXJ2YWwuc3ludGhVbml0cyksXG4gIHN5bnRoU3VwcGx5OiB0b0JpZ051bWJlcihpbnRlcnZhbC5zeW50aFN1cHBseSksXG4gIHVuaXRzOiB0b0JpZ051bWJlcihpbnRlcnZhbC51bml0cyksXG59KVxuXG5leHBvcnQgY29uc3QgaGlzdG9yeURlcHRocyA9IGFzeW5jICh7XG4gIHBvb2wsXG4gIC4uLm9wdGlvbnNcbn06IEhpc3RvcnlQb29sUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEhpc3RvcnlEZXB0aD4gPT4ge1xuICByZXR1cm4gZmV0Y2g8SGlzdG9yeURlcHRoUmVzcG9uc2U+KHtcbiAgICBwYXRoOiBgL3YyL2hpc3RvcnkvZGVwdGhzLyR7cG9vbH1gLFxuICAgIGJvZHk6IG9wdGlvbnMgYXMgb2JqZWN0LFxuICB9KS50aGVuKGRlcHRocyA9PiAoe1xuICAgIC4uLmRlcHRocyxcbiAgICBtZXRhOiB7XG4gICAgICAuLi5kZXB0aHMubWV0YSxcbiAgICAgIHBvb2wsXG4gICAgfSxcbiAgICBpbnRlcnZhbHM6IGRlcHRocy5pbnRlcnZhbHMubWFwKChpbnRlcnZhbCkgPT4gKHtcbiAgICAgIC4uLmludGVydmFsLFxuICAgICAgLi4uY29udmVydEhpc3RvcnlEZXB0aEludGVydmFsKGludGVydmFsKSxcbiAgICB9KSksXG4gIH0pKVxufVxuXG5leHBvcnQgY29uc3QgaGlzdG9yeURlcHRoc1Bvb2xzTWFueSA9IChcbiAgcG9vbHM6IEhpc3RvcnlQb29sUmVxdWVzdE9wdGlvbnNbXSxcbikgPT4gKFxuICBQcm9taXNlLmFsbChwb29scy5tYXAoaGlzdG9yeURlcHRocykpXG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVRWTEludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgdG90YWxWYWx1ZVBvb2xlZDogc3RyaW5nO1xuICB0b3RhbFZhbHVlQm9uZGVkOiBzdHJpbmc7XG4gIHRvdGFsVmFsdWVMb2NrZWQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVRWTEludGVydmFsIGV4dGVuZHMgSW50ZXJ2YWwge1xuICB0b3RhbFZhbHVlUG9vbGVkOiBCaWdOdW1iZXI7XG4gIHRvdGFsVmFsdWVCb25kZWQ6IEJpZ051bWJlcjtcbiAgdG90YWxWYWx1ZUxvY2tlZDogQmlnTnVtYmVyO1xuICBydW5lUHJpY2VVU0Q6IEJpZ051bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5VFZMUmVzcG9uc2Uge1xuICBtZXRhOiBIaXN0b3J5VFZMSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5VFZMSW50ZXJ2YWxSZXNwb25zZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlUVkwge1xuICBtZXRhOiBIaXN0b3J5VFZMSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeVRWTEludGVydmFsW107XG59XG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlJbnRlcnZhbFRWTCA9ICh0dmxJbnRlcnZhbDogSGlzdG9yeVRWTEludGVydmFsUmVzcG9uc2UpOiBIaXN0b3J5VFZMSW50ZXJ2YWwgPT4gKHtcbiAgLi4ucmF3VG9JbnRlcnZhbCh0dmxJbnRlcnZhbCksXG4gIHRvdGFsVmFsdWVQb29sZWQ6IHRvQmlnTnVtYmVyKHR2bEludGVydmFsLnRvdGFsVmFsdWVQb29sZWQpLFxuICB0b3RhbFZhbHVlQm9uZGVkOiB0b0JpZ051bWJlcih0dmxJbnRlcnZhbC50b3RhbFZhbHVlQm9uZGVkKSxcbiAgdG90YWxWYWx1ZUxvY2tlZDogdG9CaWdOdW1iZXIodHZsSW50ZXJ2YWwudG90YWxWYWx1ZUxvY2tlZCksXG4gIHJ1bmVQcmljZVVTRDogdG9CaWdOdW1iZXIodHZsSW50ZXJ2YWwucnVuZVByaWNlVVNEKSxcbn0pXG5cbmV4cG9ydCBjb25zdCByYXdUb0hpc3RvcnlUVkwgPSAodHZsOiBIaXN0b3J5VFZMUmVzcG9uc2UpOiBIaXN0b3J5VFZMID0+ICh7XG4gIG1ldGE6IHtcbiAgICAuLi50dmwsXG4gICAgLi4ucmF3VG9IaXN0b3J5SW50ZXJ2YWxUVkwodHZsLm1ldGEpLFxuICB9LFxuICBpbnRlcnZhbHM6IHR2bC5pbnRlcnZhbHMubWFwKHJhd1RvSGlzdG9yeUludGVydmFsVFZMKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBoaXN0b3J5VFZMID0gKFxuICBpbnRlcnZhbDogSW50ZXJ2YWxSZXF1ZXN0LFxuKTogUHJvbWlzZTxIaXN0b3J5VFZMPiA9PiAoXG4gIGZldGNoPEhpc3RvcnlUVkxSZXNwb25zZT4oe1xuICAgIHBhdGg6ICcvdjIvaGlzdG9yeS90dmwnLFxuICAgIGJvZHk6IGludGVydmFsLFxuICB9KS50aGVuKHJhd1RvSGlzdG9yeVRWTClcbilcblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2UgZXh0ZW5kcyBJbnRlcnZhbFJlc3BvbnNlIHtcbiAgYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWU6IHN0cmluZztcbiAgYWRkUnVuZUxpcXVpZGl0eVZvbHVtZTogc3RyaW5nO1xuICBhZGRMaXF1aWRpdHlWb2x1bWU6IHN0cmluZztcbiAgYWRkTGlxdWlkaXR5Q291bnQ6IHN0cmluZztcbiAgd2l0aGRyYXdBc3NldFZvbHVtZTogc3RyaW5nO1xuICB3aXRoZHJhd1J1bmVWb2x1bWU6IHN0cmluZztcbiAgaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQ6IHN0cmluZztcbiAgd2l0aGRyYXdWb2x1bWU6IHN0cmluZztcbiAgd2l0aGRyYXdDb3VudDogc3RyaW5nO1xuICBuZXQ6IHN0cmluZztcbiAgcnVuZVByaWNlVVNEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbCBleHRlbmRzIEludGVydmFsIHtcbiAgYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWU6IEJpZ051bWJlcjtcbiAgYWRkUnVuZUxpcXVpZGl0eVZvbHVtZTogQmlnTnVtYmVyO1xuICBhZGRMaXF1aWRpdHlWb2x1bWU6IEJpZ051bWJlcjtcbiAgYWRkTGlxdWlkaXR5Q291bnQ6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdBc3NldFZvbHVtZTogQmlnTnVtYmVyO1xuICB3aXRoZHJhd1J1bmVWb2x1bWU6IEJpZ051bWJlcjtcbiAgaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQ6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdWb2x1bWU6IEJpZ051bWJlcjtcbiAgd2l0aGRyYXdDb3VudDogQmlnTnVtYmVyO1xuICBuZXQ6IEJpZ051bWJlcjtcbiAgcnVuZVByaWNlVVNEOiBCaWdOdW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNSZXNwb25zZSB7XG4gIG1ldGE6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWxSZXNwb25zZTtcbiAgaW50ZXJ2YWxzOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlcyB7XG4gIG1ldGE6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWw7XG4gIGludGVydmFsczogSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbFtdO1xufVxuXG5leHBvcnQgY29uc3QgcmF3VG9IaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsID0gKFxuICBjaGFuZ2VzOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsUmVzcG9uc2UsXG4pOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlc0ludGVydmFsID0+ICh7XG4gIGFkZEFzc2V0TGlxdWlkaXR5Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkQXNzZXRMaXF1aWRpdHlWb2x1bWUpLFxuICBhZGRSdW5lTGlxdWlkaXR5Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkUnVuZUxpcXVpZGl0eVZvbHVtZSksXG4gIGFkZExpcXVpZGl0eVZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLmFkZExpcXVpZGl0eVZvbHVtZSksXG4gIGFkZExpcXVpZGl0eUNvdW50OiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuYWRkTGlxdWlkaXR5Q291bnQpLFxuICB3aXRoZHJhd0Fzc2V0Vm9sdW1lOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMud2l0aGRyYXdBc3NldFZvbHVtZSksXG4gIHdpdGhkcmF3UnVuZVZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3UnVuZVZvbHVtZSksXG4gIGltcGVybWFuZW50TG9zc1Byb3RlY3Rpb25QYWlkOiBuZXcgQmlnTnVtYmVyKGNoYW5nZXMuaW1wZXJtYW5lbnRMb3NzUHJvdGVjdGlvblBhaWQpLFxuICB3aXRoZHJhd1ZvbHVtZTogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3Vm9sdW1lKSxcbiAgd2l0aGRyYXdDb3VudDogbmV3IEJpZ051bWJlcihjaGFuZ2VzLndpdGhkcmF3Q291bnQpLFxuICBuZXQ6IG5ldyBCaWdOdW1iZXIoY2hhbmdlcy5uZXQpLFxuICBydW5lUHJpY2VVU0Q6IG5ldyBCaWdOdW1iZXIoY2hhbmdlcy5ydW5lUHJpY2VVU0QpLFxuICAuLi5yYXdUb0ludGVydmFsKGNoYW5nZXMpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJhd1RvSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXMgPSAoXG4gIGNoYW5nZXM6IEhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzUmVzcG9uc2UsXG4pOiBIaXN0b3J5TGlxdWlkaXR5Q2hhbmdlcyA9PiAoe1xuICAuLi5jaGFuZ2VzLFxuICBtZXRhOiB7XG4gICAgLi4uY2hhbmdlcy5tZXRhLFxuICAgIC4uLnJhd1RvSGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNJbnRlcnZhbChjaGFuZ2VzLm1ldGEpLFxuICB9LFxuICBpbnRlcnZhbHM6IGNoYW5nZXMuaW50ZXJ2YWxzLm1hcChyYXdUb0hpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzSW50ZXJ2YWwpLFxufSlcblxuZXhwb3J0IGNvbnN0IGhpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzID0gKFxuICBvcHRpb25zOiBJbnRlcnZhbFJlcXVlc3RXaXRoUG9vbCxcbik6IFByb21pc2U8SGlzdG9yeUxpcXVpZGl0eUNoYW5nZXM+ID0+IChcbiAgZmV0Y2g8SGlzdG9yeUxpcXVpZGl0eUNoYW5nZXNSZXNwb25zZT4oe1xuICAgIHBhdGg6ICcvdjIvaGlzdG9yeS9saXF1aWRpdHlfY2hhbmdlcycsXG4gICAgYm9keTogb3B0aW9ucyxcbiAgfSkudGhlbihyYXdUb0hpc3RvcnlMaXF1aWRpdHlDaGFuZ2VzKVxuKVxuIl19